positive technologies application inspector

Результат сканирования

02 декабря 2022

Проект tornado
Объект сканирования tornado
Адрес сайта http://localhost
Язык программирования Python
Версия 4.2.0.16614
Время сканирования 0:04:53
Алгоритм Искать от точек входа, Искать от доступных public и protected методов
Отключенные модули Blackbox-поиск

Проверки исходного кода

Всего файлов 306
Проверено 306
Файлов с уязвимостями 61

Всего найдено уязвимостей
359

Подтверждено 0
Опровергнуто 0
Не обработано 359 (0)
-----------------------
Новые 54
Из предыдущих сканирований 305
-----------------------
Исключено 0

Политика безопасности

Политика безопасности не проверялась

Распределение уязвимостей

По опасности

Высокая 32
Средняя 38
Потенциальная 289

По типам

Внедрение SQL-кода 11
Некорректная нейтрализация директив в динамически вычисляемом коде (Внедрение eval) 2
Подделка запроса со стороны сервера 2
Раскрытие путей 1
Удаленное выполнение кода 16
Межсайтовое выполнение сценариев 3
Открытое перенаправление 30
Подделка записи файла журнала 5
JQuery добавление HTML кода в DOM 8
JQuery небезопасная функция для DOM 4
Использование assert выражения 176
Использование urllib 1
Использование жестко закодированного пароля 47
Использование устаревшей функции 1
Небезопасные настройки SSL 4
Потенциальная десериализация произвольных данных 2
Пустой блок обработки исключений 30
Раскрытие информации в статических файлах или константах 2
Статический генератор случайных чисел 5
Уязвимые функции хэширования 9

По категориям OWASP Top 10 2021

A01 - Недостатки контроля доступа 33
A02 - Криптографические недостатки 14
A03 - Внедрение 44
A04 - Небезопасное проектирование 5
A05 - Некорректная настройка параметров безопасности 30
A07 - Недостатки идентификации и аутентификации 47
A08 - Недостатки проверки целостности ПО и данных 2
A09 - Недостатки журналирования и мониторинга 5
A10 - Подделка запроса со стороны сервера (SSRF) 2
Другое 177

Найденные уязвимости

Показано из

Новые (54)

Высокая
Внедрение SQL-кода
Описание уязвимости
Уязвимый код 97  cur.execute(stmt, args)
#BA3I6inRwK7JtOuGyEB7Ia57wgo=
Идентификатор #458
Уязвимый файл
./demos/blog/blog.py : 97
Входной файл
./demos/blog/blog.py : 91
OWASP - A03 CWE-89
...\blog.py Точка входа
87
    for val, desc in zip(row, cur.description):
88
        obj[desc.name] = val
89
    return obj
91
async def execute(self, 
stmt
, *args):
92
    """Execute a SQL statement.
94
    Must be called with ``await self.execute(...)``
95
    """
...\blog.py Точка входа данных
87
    for val, desc in zip(row, cur.description):
88
        obj[desc.name] = val
89
    return obj
91
async def execute(self, 
stmt
, *args):
92
    """Execute a SQL statement.
94
    Must be called with ``await self.execute(...)``
95
    """
...\blog.py Изменение данных
94
    Must be called with ``await self.execute(...)``
95
    """
96
    with (await self.application.db.cursor()) as cur:
97
        await cur.execute(
stmt
, args)
99
async def query(self, stmt, *args):
100
    """Query for a list of results.
102
    Typical usage::
...\blog.py Точка выхода
94
    Must be called with ``await self.execute(...)``
95
    """
96
    with (await self.application.db.cursor()) as cur:
97
        await 
cur.execute(stmt, args)

                                                                                                                
                                                                                                        
                                                                                                        
99
async def query(self, stmt, *args):
100
    """Query for a list of results.
102
    Typical usage::
#eJ7XjkBtomPqoiEstQSqo2rYRJA=
Идентификатор #461
Уязвимый файл
./demos/blog/blog.py : 97
Входной файл
./demos/blog/blog.py : 91
OWASP - A03 CWE-89
...\blog.py Точка входа
87
    for val, desc in zip(row, cur.description):
88
        obj[desc.name] = val
89
    return obj
91
async def execute(self, stmt, *
args
):
92
    """Execute a SQL statement.
94
    Must be called with ``await self.execute(...)``
95
    """
...\blog.py Точка входа данных
87
    for val, desc in zip(row, cur.description):
88
        obj[desc.name] = val
89
    return obj
91
async def execute(self, stmt, *
args
):
92
    """Execute a SQL statement.
94
    Must be called with ``await self.execute(...)``
95
    """
...\blog.py Изменение данных
94
    Must be called with ``await self.execute(...)``
95
    """
96
    with (await self.application.db.cursor()) as cur:
97
        await cur.execute(stmt, 
args
)
99
async def query(self, stmt, *args):
100
    """Query for a list of results.
102
    Typical usage::
...\blog.py Точка выхода
94
    Must be called with ``await self.execute(...)``
95
    """
96
    with (await self.application.db.cursor()) as cur:
97
        await 
cur.execute(stmt, args)

                                                                                                                
                                                                                                        
                                                                                                        
99
async def query(self, stmt, *args):
100
    """Query for a list of results.
102
    Typical usage::
Высокая
Внедрение SQL-кода
Описание уязвимости
Уязвимый код 111  cur.execute(stmt, args)
#rPnIZNwPqkmM+2IJAovOmX/nKmY=
Идентификатор #463
Уязвимый файл
./demos/blog/blog.py : 111
Входной файл
./demos/blog/blog.py : 99
OWASP - A03 CWE-89
...\blog.py Точка входа
95
    """
96
    with (await self.application.db.cursor()) as cur:
97
        await cur.execute(stmt, args)
99
async def query(self, 
stmt
, *args):
100
    """Query for a list of results.
102
    Typical usage::
104
        results = await self.query(...)
...\blog.py Точка входа данных
95
    """
96
    with (await self.application.db.cursor()) as cur:
97
        await cur.execute(stmt, args)
99
async def query(self, 
stmt
, *args):
100
    """Query for a list of results.
102
    Typical usage::
104
        results = await self.query(...)
...\blog.py Изменение данных
108
        for row in await self.query(...)
109
    """
110
    with (await self.application.db.cursor()) as cur:
111
        await cur.execute(
stmt
, args)
112
        return [self.row_to_obj(row, cur) for row in await cur.fetchall()]
114
async def queryone(self, stmt, *args):
115
    """Query for exactly one result.
...\blog.py Точка выхода
108
        for row in await self.query(...)
109
    """
110
    with (await self.application.db.cursor()) as cur:
111
        await 
cur.execute(stmt, args)

                                                                                                                
                                                                                                        
                                                                                                        
112
        return [self.row_to_obj(row, cur) for row in await cur.fetchall()]
114
async def queryone(self, stmt, *args):
115
    """Query for exactly one result.
#moEjivEEbxpEXWtVlTWIE7D5GSM=
Идентификатор #465
Уязвимый файл
./demos/blog/blog.py : 111
Входной файл
./demos/blog/blog.py : 99
OWASP - A03 CWE-89
...\blog.py Точка входа
95
    """
96
    with (await self.application.db.cursor()) as cur:
97
        await cur.execute(stmt, args)
99
async def query(self, stmt, *
args
):
100
    """Query for a list of results.
102
    Typical usage::
104
        results = await self.query(...)
...\blog.py Точка входа данных
95
    """
96
    with (await self.application.db.cursor()) as cur:
97
        await cur.execute(stmt, args)
99
async def query(self, stmt, *
args
):
100
    """Query for a list of results.
102
    Typical usage::
104
        results = await self.query(...)
...\blog.py Изменение данных
108
        for row in await self.query(...)
109
    """
110
    with (await self.application.db.cursor()) as cur:
111
        await cur.execute(stmt, 
args
)
112
        return [self.row_to_obj(row, cur) for row in await cur.fetchall()]
114
async def queryone(self, stmt, *args):
115
    """Query for exactly one result.
...\blog.py Точка выхода
108
        for row in await self.query(...)
109
    """
110
    with (await self.application.db.cursor()) as cur:
111
        await 
cur.execute(stmt, args)

                                                                                                                
                                                                                                        
                                                                                                        
112
        return [self.row_to_obj(row, cur) for row in await cur.fetchall()]
114
async def queryone(self, stmt, *args):
115
    """Query for exactly one result.
Высокая
Некорректная нейтрализация директив в динамически вычисляемом коде (Внедрение eval)
Описание уязвимости
Уязвимый код 58  eval("(" + response + ")")
#jeGPna+itRkX7F03h4IhTFuueBM=
Идентификатор #653
Уязвимый файл
./demos/chat/static/chat.js : 58
Входной файл
./demos/chat/static/chat.js : 57
OWASP - A03 CWE-95
...\chat.js Точка входа
54
jQuery.postJSON = function(url, args, callback) {
55
    args._xsrf = getCookie("_xsrf");
56
    $.ajax({url: url, data: $.param(args), dataType: "text", type: "POST",
57
            success: function(
response
) {
58
        if (callback) callback(eval("(" + response + ")"));
59
    }, error: function(response) {
60
        console.log("ERROR:", response);
...\chat.js Точка входа данных
54
jQuery.postJSON = function(url, args, callback) {
55
    args._xsrf = getCookie("_xsrf");
56
    $.ajax({url: url, data: $.param(args), dataType: "text", type: "POST",
57
            success: function(
response
) {
58
        if (callback) callback(eval("(" + response + ")"));
59
    }, error: function(response) {
60
        console.log("ERROR:", response);
...\chat.js Изменение данных
55
args._xsrf = getCookie("_xsrf");
56
$.ajax({url: url, data: $.param(args), dataType: "text", type: "POST",
57
        success: function(response) {
58
    if (callback) callback(eval("(" + 
response
 + ")"));
59
}, error: function(response) {
60
    console.log("ERROR:", response);
61
}});
...\chat.js Изменение данных
55
args._xsrf = getCookie("_xsrf");
56
$.ajax({url: url, data: $.param(args), dataType: "text", type: "POST",
57
        success: function(response) {
58
    if (callback) callback(eval(
"(" + response + ")"
));
59
}, error: function(response) {
60
    console.log("ERROR:", response);
61
}});
...\chat.js Точка выхода
55
args._xsrf = getCookie("_xsrf");
56
$.ajax({url: url, data: $.param(args), dataType: "text", type: "POST",
57
        success: function(response) {
58
    if (callback) callback(
eval("(" + response + ")")
);
59
}, error: function(response) {
60
    console.log("ERROR:", response);
61
}});
Высокая
Некорректная нейтрализация директив в динамически вычисляемом коде (Внедрение eval)
Описание уязвимости
Уязвимый код 102  eval("(" + response + ")")
#LWk76tZQgKtx4h+RDd9ycv98HlE=
Идентификатор #654
Уязвимый файл
./demos/chat/static/chat.js : 102
Входной файл
./demos/chat/static/chat.js : 100
OWASP - A03 CWE-95
...\chat.js Точка входа
96
            data: $.param(args), success: updater.onSuccess,
97
            error: updater.onError});
98
},
100
onSuccess: function(
response
) {
101
    try {
102
        updater.newMessages(eval("(" + response + ")"));
103
    } catch (e) {
...\chat.js Точка входа данных
96
            data: $.param(args), success: updater.onSuccess,
97
            error: updater.onError});
98
},
100
onSuccess: function(
response
) {
101
    try {
102
        updater.newMessages(eval("(" + response + ")"));
103
    } catch (e) {
...\chat.js Изменение данных
98
},
100
onSuccess: function(response) {
101
    try {
102
        updater.newMessages(eval("(" + 
response
 + ")"));
103
    } catch (e) {
104
        updater.onError();
105
        return;
...\chat.js Изменение данных
98
},
100
onSuccess: function(response) {
101
    try {
102
        updater.newMessages(eval(
"(" + response + ")"
));
103
    } catch (e) {
104
        updater.onError();
105
        return;
...\chat.js Точка выхода
98
},
100
onSuccess: function(response) {
101
    try {
102
        updater.newMessages(
eval("(" + response + ")")
);
103
    } catch (e) {
104
        updater.onError();
105
        return;
Высокая
Подделка запроса со стороны сервера
Описание уязвимости
Уязвимый код 129  client.request(b"GET", utf8(url))
#1OEY9DJTOrX2T/BIhdQz+YZjFn8=
Идентификатор #632
Уязвимый файл
./tornado/test/twisted_test.py : 129
Входной файл
./tornado/test/twisted_test.py : 125
OWASP - A10 CWE-918
...\twisted_test.py Точка входа
121
    fut.add_done_callback(lambda f: self.stop_loop())
122
    runner()
123
    return fut.result()
125
def twisted_fetch(self, 
url
, runner):
126
    # http://twistedmatrix.com/documents/current/web/howto/client.html
127
    chunks = []
128
    client = Agent(self.reactor)
...\twisted_test.py Точка входа данных
121
    fut.add_done_callback(lambda f: self.stop_loop())
122
    runner()
123
    return fut.result()
125
def twisted_fetch(self, 
url
, runner):
126
    # http://twistedmatrix.com/documents/current/web/howto/client.html
127
    chunks = []
128
    client = Agent(self.reactor)
...\twisted_test.py Изменение данных
126
# http://twistedmatrix.com/documents/current/web/howto/client.html
127
chunks = []
128
client = Agent(self.reactor)
129
d = client.request(b"GET", utf8(
url
))
131
class Accumulator(Protocol):
132
    def __init__(self, finished):
133
        self.finished = finished
...\twisted_test.py Изменение данных
126
# http://twistedmatrix.com/documents/current/web/howto/client.html
127
chunks = []
128
client = Agent(self.reactor)
129
d = client.request(b"GET", 
utf8(url)
)
131
class Accumulator(Protocol):
132
    def __init__(self, finished):
133
        self.finished = finished
...\twisted_test.py Точка выхода
126
# http://twistedmatrix.com/documents/current/web/howto/client.html
127
chunks = []
128
client = Agent(self.reactor)
129
d = 
client.request(b"GET", utf8(url))

                                                                                                                
                                                                                                        
                                                                                                        
131
class Accumulator(Protocol):
132
    def __init__(self, finished):
133
        self.finished = finished
Высокая
Подделка запроса со стороны сервера
Описание уязвимости
Уязвимый код 174  client.request(b"GET", utf8(url))
#5O9jgBsqEUK7+/6PsMkZZic4oUs=
Идентификатор #635
Уязвимый файл
./tornado/test/twisted_test.py : 174
Входной файл
./tornado/test/twisted_test.py : 165
OWASP - A10 CWE-918
...\twisted_test.py Точка входа
161
    runner()
162
    self.assertTrue(chunks)
163
    return b"".join(chunks)
165
def twisted_coroutine_fetch(self, 
url
, runner):
166
    body = [None]
168
    @gen.coroutine
169
    def f():
...\twisted_test.py Точка входа данных
161
    runner()
162
    self.assertTrue(chunks)
163
    return b"".join(chunks)
165
def twisted_coroutine_fetch(self, 
url
, runner):
166
    body = [None]
168
    @gen.coroutine
169
    def f():
...\twisted_test.py Изменение данных
171
# by reading the body in one blob instead of streaming it with
172
# a Protocol.
173
client = Agent(self.reactor)
174
response = yield client.request(b"GET", utf8(
url
))
175
with warnings.catch_warnings():
176
    # readBody has a buggy DeprecationWarning in Twisted 15.0:
177
    # https://twistedmatrix.com/trac/changeset/43379
...\twisted_test.py Изменение данных
171
# by reading the body in one blob instead of streaming it with
172
# a Protocol.
173
client = Agent(self.reactor)
174
response = yield client.request(b"GET", 
utf8(url)
)
175
with warnings.catch_warnings():
176
    # readBody has a buggy DeprecationWarning in Twisted 15.0:
177
    # https://twistedmatrix.com/trac/changeset/43379
...\twisted_test.py Точка выхода
171
# by reading the body in one blob instead of streaming it with
172
# a Protocol.
173
client = Agent(self.reactor)
174
response = yield 
client.request(b"GET", utf8(url))

                                                                                                                
                                                                                                        
                                                                                                        
175
with warnings.catch_warnings():
176
    # readBody has a buggy DeprecationWarning in Twisted 15.0:
177
    # https://twistedmatrix.com/trac/changeset/43379
Высокая
Раскрытие путей
Описание уязвимости
Уязвимый код 224  os.chmod(file, mode)
#o2/MNawtUSSZLzxnhen2LHyOooU=
Идентификатор #381
Уязвимый файл
./tornado/netutil.py : 224
Входной файл
./tornado/netutil.py : 194
OWASP - A01 CWE-22
...\netutil.py Точка входа
188
    return sockets
191
if hasattr(socket, "AF_UNIX"):
193
    def bind_unix_socket(
194
        
file
: str, mode: int = 0o600, backlog: int = _DEFAULT_...
195
    ) -> socket.socket:
196
        """Creates a listening unix socket.
198
        If a socket with the given name already exists, it will be deleted.
...\netutil.py Точка входа данных
188
    return sockets
191
if hasattr(socket, "AF_UNIX"):
193
    def bind_unix_socket(
194
        
file
: str, mode: int = 0o600, backlog: int = _DEFAULT_...
195
    ) -> socket.socket:
196
        """Creates a listening unix socket.
198
        If a socket with the given name already exists, it will be deleted.
...\netutil.py Изменение данных
221
            else:
222
                raise ValueError("File %s exists and is not a socket", file)
223
        sock.bind(file)
224
        os.chmod(
file
, mode)
225
        sock.listen(backlog)
226
        return sock
229
def add_accept_handler(
...\netutil.py Точка выхода
221
            else:
222
                raise ValueError("File %s exists and is not a socket", file)
223
        sock.bind(file)
224
        
os.chmod(file, mode)

                                                                                                                
                                                                                                        
                                                                                                        
225
        sock.listen(backlog)
226
        return sock
229
def add_accept_handler(
Высокая
Удаленное выполнение кода
Описание уязвимости
Уязвимый код 167  exec(code, glob, loc)
#SV97wRRueTP8X1Ch6+zdwUfaKNY=
Идентификатор #438
Уязвимый файл
./tornado/util.py : 167
Входной файл
./tornado/util.py : 161
OWASP - A03 CWE-94
...\util.py Точка входа
156
    except AttributeError:
157
        raise ImportError("No module named %s" % parts[-1])
160
def exec_in(
161
    
code
: Any, glob: Dict[str, Any], loc: Optional[Optiona...
162
) -> None:
163
    if isinstance(code, str):
164
        # exec(string) inherits the caller's future imports; compile
...\util.py Точка входа данных
156
    except AttributeError:
157
        raise ImportError("No module named %s" % parts[-1])
160
def exec_in(
161
    
code
: Any, glob: Dict[str, Any], loc: Optional[Optiona...
162
) -> None:
163
    if isinstance(code, str):
164
        # exec(string) inherits the caller's future imports; compile
...\util.py Изменение данных
163
    if isinstance(code, str):
164
        # exec(string) inherits the caller's future imports; compile
165
        # the string first to prevent that.
166
        
code
 = compile(code, "<string>", "exec", dont_inherit=...
167
    exec(code, glob, loc)
170
def raise_exc_info(
171
    exc_info,  # type: Tuple[Optional[type], Optional[BaseException], Optional[TracebackType]]
...\util.py Изменение данных
163
    if isinstance(code, str):
164
        # exec(string) inherits the caller's future imports; compile
165
        # the string first to prevent that.
166
        code = 
compile(code, "<string>", "exec", dont_inherit=True)

                                                                                                                
                                                                                                        
                                                                                                        
167
    exec(code, glob, loc)
170
def raise_exc_info(
171
    exc_info,  # type: Tuple[Optional[type], Optional[BaseException], Optional[TracebackType]]
...\util.py Изменение данных
163
    if isinstance(code, str):
164
        # exec(string) inherits the caller's future imports; compile
165
        # the string first to prevent that.
166
        
code
 = compile(code, "<string>", "exec", dont_inherit=...
167
    exec(code, glob, loc)
170
def raise_exc_info(
171
    exc_info,  # type: Tuple[Optional[type], Optional[BaseException], Optional[TracebackType]]
...\util.py Изменение данных
164
        # exec(string) inherits the caller's future imports; compile
165
        # the string first to prevent that.
166
        code = compile(code, "<string>", "exec", dont_inherit=True)
167
    exec(
code
, glob, loc)
170
def raise_exc_info(
171
    exc_info,  # type: Tuple[Optional[type], Optional[BaseException], Optional[TracebackType]]
172
):
...\util.py Точка выхода
164
        # exec(string) inherits the caller's future imports; compile
165
        # the string first to prevent that.
166
        code = compile(code, "<string>", "exec", dont_inherit=True)
167
    
exec(code, glob, loc)

                                                                                                                
                                                                                                        
                                                                                                        
170
def raise_exc_info(
171
    exc_info,  # type: Tuple[Optional[type], Optional[BaseException], Optional[TracebackType]]
172
):
#bXr3gVtvF8dNV8Ef8s6TbWMClVs=
Идентификатор #442
Уязвимый файл
./tornado/util.py : 167
Входной файл
./tornado/util.py : 161
OWASP - A03 CWE-94
...\util.py Точка входа
156
    except AttributeError:
157
        raise ImportError("No module named %s" % parts[-1])
160
def exec_in(
161
    code: Any, 
glob
: Dict[str, Any], loc: Optional[Optional[Mapping[s...
162
) -> None:
163
    if isinstance(code, str):
164
        # exec(string) inherits the caller's future imports; compile
...\util.py Точка входа данных
156
    except AttributeError:
157
        raise ImportError("No module named %s" % parts[-1])
160
def exec_in(
161
    code: Any, 
glob
: Dict[str, Any], loc: Optional[Optional[Mapping[s...
162
) -> None:
163
    if isinstance(code, str):
164
        # exec(string) inherits the caller's future imports; compile
...\util.py Изменение данных
164
        # exec(string) inherits the caller's future imports; compile
165
        # the string first to prevent that.
166
        code = compile(code, "<string>", "exec", dont_inherit=True)
167
    exec(code, 
glob
, loc)
170
def raise_exc_info(
171
    exc_info,  # type: Tuple[Optional[type], Optional[BaseException], Optional[TracebackType]]
172
):
...\util.py Точка выхода
164
        # exec(string) inherits the caller's future imports; compile
165
        # the string first to prevent that.
166
        code = compile(code, "<string>", "exec", dont_inherit=True)
167
    
exec(code, glob, loc)

                                                                                                                
                                                                                                        
                                                                                                        
170
def raise_exc_info(
171
    exc_info,  # type: Tuple[Optional[type], Optional[BaseException], Optional[TracebackType]]
172
):
#vwadveVsJi/OwIYaSXi3j+AHiNo=
Идентификатор #446
Уязвимый файл
./tornado/util.py : 167
Входной файл
./tornado/util.py : 161
OWASP - A03 CWE-94
...\util.py Точка входа
156
    except AttributeError:
157
        raise ImportError("No module named %s" % parts[-1])
160
def exec_in(
161
    code: Any, glob: Dict[str, Any], 
loc
: Optional[Optional[Mapping[str, Any]]] = None
162
) -> None:
163
    if isinstance(code, str):
164
        # exec(string) inherits the caller's future imports; compile
...\util.py Точка входа данных
156
    except AttributeError:
157
        raise ImportError("No module named %s" % parts[-1])
160
def exec_in(
161
    code: Any, glob: Dict[str, Any], 
loc
: Optional[Optional[Mapping[str, Any]]] = None
162
) -> None:
163
    if isinstance(code, str):
164
        # exec(string) inherits the caller's future imports; compile
...\util.py Изменение данных
164
        # exec(string) inherits the caller's future imports; compile
165
        # the string first to prevent that.
166
        code = compile(code, "<string>", "exec", dont_inherit=True)
167
    exec(code, glob, 
loc
)
170
def raise_exc_info(
171
    exc_info,  # type: Tuple[Optional[type], Optional[BaseException], Optional[TracebackType]]
172
):
...\util.py Точка выхода
164
        # exec(string) inherits the caller's future imports; compile
165
        # the string first to prevent that.
166
        code = compile(code, "<string>", "exec", dont_inherit=True)
167
    
exec(code, glob, loc)

                                                                                                                
                                                                                                        
                                                                                                        
170
def raise_exc_info(
171
    exc_info,  # type: Tuple[Optional[type], Optional[BaseException], Optional[TracebackType]]
172
):
Высокая
Удаленное выполнение кода
Описание уязвимости
Уязвимый код 693  subprocess.check_output(args)
#0tPSHXaJEx5OuNSY7Xmt1V1A7lE=
Идентификатор #542
Уязвимый файл
./tornado/test/ioloop_test.py : 693
Входной файл
./tornado/test/ioloop_test.py : 687
OWASP - A03 CWE-94
...\ioloop_test.py Точка входа
682
        with mock.patch("random.random", mock_random):
683
            self.assertEqual(self.simulate_calls(pc, call_durations), expected)
686
class TestIOLoopConfiguration(unittest.TestCase):
687
    def run_python(self, *
statements
):
688
        stmt_list = [
689
            "from tornado.ioloop import IOLoop",
690
            "classname = lambda x: x.__class__.__name__",
...\ioloop_test.py Точка входа данных
682
        with mock.patch("random.random", mock_random):
683
            self.assertEqual(self.simulate_calls(pc, call_durations), expected)
686
class TestIOLoopConfiguration(unittest.TestCase):
687
    def run_python(self, *
statements
):
688
        stmt_list = [
689
            "from tornado.ioloop import IOLoop",
690
            "classname = lambda x: x.__class__.__name__",
...\ioloop_test.py Изменение данных
688
    stmt_list = [
689
        "from tornado.ioloop import IOLoop",
690
        "classname = lambda x: x.__class__.__name__",
691
    ] + list(
statements
)
692
    args = [sys.executable, "-c", "; ".join(stmt_list)]
693
    return native_str(subprocess.check_output(args)).strip()
695
def test_default(self):
...\ioloop_test.py Изменение данных
688
    stmt_list = [
689
        "from tornado.ioloop import IOLoop",
690
        "classname = lambda x: x.__class__.__name__",
691
    ] + 
list(statements)

                                                                                                                
                                                                                                        
                                                                                                        
692
    args = [sys.executable, "-c", "; ".join(stmt_list)]
693
    return native_str(subprocess.check_output(args)).strip()
695
def test_default(self):
...\ioloop_test.py Изменение данных
683
            self.assertEqual(self.simulate_calls(pc, call_durations), expected)
686
class TestIOLoopConfiguration(unittest.TestCase):
687
    def run_python(self, *statements):
688

                                                                                                                
                                                                                                        
                                                                                                            
                                                                                                                
                                                                                                                    
        stmt_list = [

                                                                                                                
                                                                                                        
                                                                                                        
689
            "from tornado.ioloop import IOLoop",
690
            "classname = lambda x: x.__class__.__name__",
691
        ] + list(statements)
...\ioloop_test.py Изменение данных
683
            self.assertEqual(self.simulate_calls(pc, call_durations), expected)
686
class TestIOLoopConfiguration(unittest.TestCase):
687
    def run_python(self, *statements):
688
        
stmt_list
 = [
689
            "from tornado.ioloop import IOLoop",
690
            "classname = lambda x: x.__class__.__name__",
691
        ] + list(statements)
...\ioloop_test.py Изменение данных
689
        "from tornado.ioloop import IOLoop",
690
        "classname = lambda x: x.__class__.__name__",
691
    ] + list(statements)
692
    args = [sys.executable, "-c", "; ".join(
stmt_list
)]
693
    return native_str(subprocess.check_output(args)).strip()
695
def test_default(self):
696
    # When asyncio is available, it is used by default.
...\ioloop_test.py Изменение данных
689
        "from tornado.ioloop import IOLoop",
690
        "classname = lambda x: x.__class__.__name__",
691
    ] + list(statements)
692
    args = [sys.executable, "-c", "
; ".join(stmt_list)
]
693
    return native_str(subprocess.check_output(args)).strip()
695
def test_default(self):
696
    # When asyncio is available, it is used by default.
...\ioloop_test.py Изменение данных
689
        "from tornado.ioloop import IOLoop",
690
        "classname = lambda x: x.__class__.__name__",
691
    ] + list(statements)
692
    args = 
[sys.executable, "-c", "; ".join(stmt_list)]

                                                                                                                
                                                                                                        
                                                                                                        
693
    return native_str(subprocess.check_output(args)).strip()
695
def test_default(self):
696
    # When asyncio is available, it is used by default.
...\ioloop_test.py Изменение данных
689
        "from tornado.ioloop import IOLoop",
690
        "classname = lambda x: x.__class__.__name__",
691
    ] + list(statements)
692
    
args
 = [sys.executable, "-c", "; ".join(stmt_list)]
693
    return native_str(subprocess.check_output(args)).strip()
695
def test_default(self):
696
    # When asyncio is available, it is used by default.
...\ioloop_test.py Изменение данных
690
        "classname = lambda x: x.__class__.__name__",
691
    ] + list(statements)
692
    args = [sys.executable, "-c", "; ".join(stmt_list)]
693
    return native_str(subprocess.check_output(
args
)).strip()
695
def test_default(self):
696
    # When asyncio is available, it is used by default.
697
    cls = self.run_python("print(classname(IOLoop.current()))")
...\ioloop_test.py Точка выхода
690
        "classname = lambda x: x.__class__.__name__",
691
    ] + list(statements)
692
    args = [sys.executable, "-c", "; ".join(stmt_list)]
693
    return native_str(
subprocess.check_output(args)
).strip()
695
def test_default(self):
696
    # When asyncio is available, it is used by default.
697
    cls = self.run_python("print(classname(IOLoop.current()))")
Высокая
Удаленное выполнение кода
Описание уязвимости
Уязвимый код 208  subprocess.Popen( [sys.executable, "-c", program] + (args or []), stdout=subprocess.PIPE, stderr=subprocess.STDOUT, )
#bsGW+H3t1N7jIc/+s3mDMP+iRQA=
Идентификатор #595
Уязвимый файл
./tornado/test/log_test.py : 208
Входной файл
./tornado/test/log_test.py : 199
OWASP - A03 CWE-94
...\log_test.py Точка входа
193
                handler.close()
196
class LoggingOptionTest(unittest.TestCase):
197
    """Test the ability to enable and disable Tornado's logging hooks."""
199
    def logs_present(self, 
statement
, args=None):
200
        # Each test may manipulate and/or parse the options and then logs
201
        # a line at the 'info' level.  This level is ignored in the
202
        # logging module by default, but Tornado turns it on by default
...\log_test.py Точка входа данных
193
                handler.close()
196
class LoggingOptionTest(unittest.TestCase):
197
    """Test the ability to enable and disable Tornado's logging hooks."""
199
    def logs_present(self, 
statement
, args=None):
200
        # Each test may manipulate and/or parse the options and then logs
201
        # a line at the 'info' level.  This level is ignored in the
202
        # logging module by default, but Tornado turns it on by default
...\log_test.py Изменение данных
204
# ran.
205
IMPORT = "from tornado.options import options, parse_command_line"
206
LOG_INFO = 'import logging; logging.info("hello")'
207
program = ";".join([IMPORT, 
statement
, LOG_INFO])
208
proc = subprocess.Popen(
209
    [sys.executable, "-c", program] + (args or []),
210
    stdout=subprocess.PIPE,
...\log_test.py Изменение данных
204
# ran.
205
IMPORT = "from tornado.options import options, parse_command_line"
206
LOG_INFO = 'import logging; logging.info("hello")'
207
program = ";".join(
[IMPORT, statement, LOG_INFO]
)
208
proc = subprocess.Popen(
209
    [sys.executable, "-c", program] + (args or []),
210
    stdout=subprocess.PIPE,
...\log_test.py Изменение данных
204
# ran.
205
IMPORT = "from tornado.options import options, parse_command_line"
206
LOG_INFO = 'import logging; logging.info("hello")'
207
program = "
;".join([IMPORT, statement, LOG_INFO])

                                                                                                                
                                                                                                        
                                                                                                        
208
proc = subprocess.Popen(
209
    [sys.executable, "-c", program] + (args or []),
210
    stdout=subprocess.PIPE,
...\log_test.py Изменение данных
204
# ran.
205
IMPORT = "from tornado.options import options, parse_command_line"
206
LOG_INFO = 'import logging; logging.info("hello")'
207

                                                                                                                
                                                                                                        
                                                                                                            
                                                                                                                
                                                                                                                    
program
 = ";".join([IMPORT, statement, LOG_INFO])
208
proc = subprocess.Popen(
209
    [sys.executable, "-c", program] + (args or []),
210
    stdout=subprocess.PIPE,
...\log_test.py Изменение данных
206
LOG_INFO = 'import logging; logging.info("hello")'
207
program = ";".join([IMPORT, statement, LOG_INFO])
208
proc = subprocess.Popen(
209
    [sys.executable, "-c", 
program
] + (args or []),
210
    stdout=subprocess.PIPE,
211
    stderr=subprocess.STDOUT,
212
)
...\log_test.py Изменение данных
206
LOG_INFO = 'import logging; logging.info("hello")'
207
program = ";".join([IMPORT, statement, LOG_INFO])
208
proc = subprocess.Popen(
209
    
[sys.executable, "-c", program]
 + (args or []),
210
    stdout=subprocess.PIPE,
211
    stderr=subprocess.STDOUT,
212
)
...\log_test.py Изменение данных
206
LOG_INFO = 'import logging; logging.info("hello")'
207
program = ";".join([IMPORT, statement, LOG_INFO])
208
proc = subprocess.Popen(
209
    
[sys.executable, "-c", program] + (args or []
),
210
    stdout=subprocess.PIPE,
211
    stderr=subprocess.STDOUT,
212
)
...\log_test.py Точка выхода
205
IMPORT = "from tornado.options import options, parse_command_line"
206
LOG_INFO = 'import logging; logging.info("hello")'
207
program = ";".join([IMPORT, statement, LOG_INFO])
208

                                                                                                                
                                                                                                        
                                                                                                            
                                                                                                                
                                                                                                                    
proc = subprocess.Popen(

                                                                                                                
                                                                                                        
                                                                                                        
209
    [sys.executable, "-c", program] + (args or []),
210
    stdout=subprocess.PIPE,
211
    stderr=subprocess.STDOUT,
#ZQ1JvtMrbl0Dsx1T021xT2/41Lc=
Идентификатор #597
Уязвимый файл
./tornado/test/log_test.py : 208
Входной файл
./tornado/test/log_test.py : 199
OWASP - A03 CWE-94
...\log_test.py Точка входа
193
                handler.close()
196
class LoggingOptionTest(unittest.TestCase):
197
    """Test the ability to enable and disable Tornado's logging hooks."""
199
    def logs_present(self, statement, 
args
=None):
200
        # Each test may manipulate and/or parse the options and then logs
201
        # a line at the 'info' level.  This level is ignored in the
202
        # logging module by default, but Tornado turns it on by default
...\log_test.py Точка входа данных
193
                handler.close()
196
class LoggingOptionTest(unittest.TestCase):
197
    """Test the ability to enable and disable Tornado's logging hooks."""
199
    def logs_present(self, statement, 
args
=None):
200
        # Each test may manipulate and/or parse the options and then logs
201
        # a line at the 'info' level.  This level is ignored in the
202
        # logging module by default, but Tornado turns it on by default
...\log_test.py Изменение данных
206
LOG_INFO = 'import logging; logging.info("hello")'
207
program = ";".join([IMPORT, statement, LOG_INFO])
208
proc = subprocess.Popen(
209
    [sys.executable, "-c", program] + (
args
 or []),
210
    stdout=subprocess.PIPE,
211
    stderr=subprocess.STDOUT,
212
)
...\log_test.py Изменение данных
206
LOG_INFO = 'import logging; logging.info("hello")'
207
program = ";".join([IMPORT, statement, LOG_INFO])
208
proc = subprocess.Popen(
209
    
[sys.executable, "-c", program] + (args or []
),
210
    stdout=subprocess.PIPE,
211
    stderr=subprocess.STDOUT,
212
)
...\log_test.py Точка выхода
205
IMPORT = "from tornado.options import options, parse_command_line"
206
LOG_INFO = 'import logging; logging.info("hello")'
207
program = ";".join([IMPORT, statement, LOG_INFO])
208

                                                                                                                
                                                                                                        
                                                                                                            
                                                                                                                
                                                                                                                    
proc = subprocess.Popen(

                                                                                                                
                                                                                                        
                                                                                                        
209
    [sys.executable, "-c", program] + (args or []),
210
    stdout=subprocess.PIPE,
211
    stderr=subprocess.STDOUT,
Высокая
Удаленное выполнение кода
Описание уязвимости
Уязвимый код 129  proc.stdin.write(utf8(code))
#sJEbjjqeJzrQv3vjATI2cCYiAW0=
Идентификатор #604
Уязвимый файл
./tornado/test/tcpserver_test.py : 129
Входной файл
./tornado/test/tcpserver_test.py : 125
OWASP - A03 CWE-94
...\tcpserver_test.py Точка входа
122
# processes, each of which prints its task id to stdout (a single
123
# byte, so we don't have to worry about atomicity of the shared
124
# stdout stream) and then exits.
125
def run_subproc(self, 
code
):
126
    proc = subprocess.Popen(
127
        sys.executable, stdin=subprocess.PIPE, stdout=subprocess.PIPE
128
    )
...\tcpserver_test.py Точка входа данных
122
# processes, each of which prints its task id to stdout (a single
123
# byte, so we don't have to worry about atomicity of the shared
124
# stdout stream) and then exits.
125
def run_subproc(self, 
code
):
126
    proc = subprocess.Popen(
127
        sys.executable, stdin=subprocess.PIPE, stdout=subprocess.PIPE
128
    )
...\tcpserver_test.py Изменение данных
126
proc = subprocess.Popen(
127
    sys.executable, stdin=subprocess.PIPE, stdout=subprocess.PIPE
128
)
129
proc.stdin.write(utf8(
code
))
130
proc.stdin.close()
131
proc.wait()
132
stdout = proc.stdout.read()
...\tcpserver_test.py Изменение данных
126
proc = subprocess.Popen(
127
    sys.executable, stdin=subprocess.PIPE, stdout=subprocess.PIPE
128
)
129
proc.stdin.write(
utf8(code)
)
130
proc.stdin.close()
131
proc.wait()
132
stdout = proc.stdout.read()
...\tcpserver_test.py Точка выхода
126
proc = subprocess.Popen(
127
    sys.executable, stdin=subprocess.PIPE, stdout=subprocess.PIPE
128
)
129

                                                                                                                
                                                                                                        
                                                                                                            
                                                                                                                
                                                                                                                    
proc.stdin.write(utf8(code))

                                                                                                                
                                                                                                        
                                                                                                        
130
proc.stdin.close()
131
proc.wait()
132
stdout = proc.stdout.read()
Высокая
Удаленное выполнение кода
Описание уязвимости
Уязвимый код 93  exec(textwrap.dedent(s), global_namespace, local_namespace)
#8z4lrurbE01tji/g+cA4znWP17w=
Идентификатор #650
Уязвимый файл
./tornado/test/util.py : 93
Входной файл
./tornado/test/util.py : 82
OWASP - A03 CWE-94
...\util.py Точка входа
77
    conn.close()
78
    server_socket.close()
79
    return (client_socket.close, client_addr[1])
82
def exec_test(
caller_globals
, caller_locals, s):
83
    """Execute ``s`` in a given context and return the result namespace.
85
    Used to define functions for tests in particular python
86
    versions that would be syntax errors in older versions.
...\util.py Точка входа данных
77
    conn.close()
78
    server_socket.close()
79
    return (client_socket.close, client_addr[1])
82
def exec_test(
caller_globals
, caller_locals, s):
83
    """Execute ``s`` in a given context and return the result namespace.
85
    Used to define functions for tests in particular python
86
    versions that would be syntax errors in older versions.
...\util.py Изменение данных
88
# Flatten the real global and local namespace into our fake
89
# globals: it's all global from the perspective of code defined
90
# in s.
91
global_namespace = dict(
caller_globals
, **caller_locals)  # type: ignore
92
local_namespace = {}  # type: typing.Dict[str, typing.Any]
93
exec(textwrap.dedent(s), global_namespace, local_namespace)
94
return local_namespace
...\util.py Изменение данных
88
# Flatten the real global and local namespace into our fake
89
# globals: it's all global from the perspective of code defined
90
# in s.
91
global_namespace = 
dict(caller_globals, **caller_locals)
  # type: ignore
92
local_namespace = {}  # type: typing.Dict[str, typing.Any]
93
exec(textwrap.dedent(s), global_namespace, local_namespace)
94
return local_namespace
...\util.py Изменение данных
88
# Flatten the real global and local namespace into our fake
89
# globals: it's all global from the perspective of code defined
90
# in s.
91

                                                                                                                
                                                                                                        
                                                                                                            
                                                                                                                
                                                                                                                    
global_namespace
 = dict(caller_globals, **caller_locals)  # type: ...
92
local_namespace = {}  # type: typing.Dict[str, typing.Any]
93
exec(textwrap.dedent(s), global_namespace, local_namespace)
94
return local_namespace
...\util.py Изменение данных
90
    # in s.
91
    global_namespace = dict(caller_globals, **caller_locals)  # type: ignore
92
    local_namespace = {}  # type: typing.Dict[str, typing.Any]
93
    exec(textwrap.dedent(s), 
global_namespace
, local_namespace)
94
    return local_namespace
97
def subTest(test, *args, **kwargs):
98
    """Compatibility shim for unittest.TestCase.subTest.
...\util.py Точка выхода
90
    # in s.
91
    global_namespace = dict(caller_globals, **caller_locals)  # type: ignore
92
    local_namespace = {}  # type: typing.Dict[str, typing.Any]
93
    
exec(textwrap.dedent(s), global_namespace, local_namespace)

                                                                                                                
                                                                                                        
                                                                                                        
94
    return local_namespace
97
def subTest(test, *args, **kwargs):
98
    """Compatibility shim for unittest.TestCase.subTest.
#cpAywNzreD1jjbpPcu1/McslfSs=
Идентификатор #651
Уязвимый файл
./tornado/test/util.py : 93
Входной файл
./tornado/test/util.py : 82
OWASP - A03 CWE-94
...\util.py Точка входа
77
    conn.close()
78
    server_socket.close()
79
    return (client_socket.close, client_addr[1])
82
def exec_test(caller_globals, 
caller_locals
, s):
83
    """Execute ``s`` in a given context and return the result namespace.
85
    Used to define functions for tests in particular python
86
    versions that would be syntax errors in older versions.
...\util.py Точка входа данных
77
    conn.close()
78
    server_socket.close()
79
    return (client_socket.close, client_addr[1])
82
def exec_test(caller_globals, 
caller_locals
, s):
83
    """Execute ``s`` in a given context and return the result namespace.
85
    Used to define functions for tests in particular python
86
    versions that would be syntax errors in older versions.
...\util.py Изменение данных
88
# Flatten the real global and local namespace into our fake
89
# globals: it's all global from the perspective of code defined
90
# in s.
91
global_namespace = dict(caller_globals, **
caller_locals
)  # type: ignore
92
local_namespace = {}  # type: typing.Dict[str, typing.Any]
93
exec(textwrap.dedent(s), global_namespace, local_namespace)
94
return local_namespace
...\util.py Изменение данных
88
# Flatten the real global and local namespace into our fake
89
# globals: it's all global from the perspective of code defined
90
# in s.
91
global_namespace = dict(caller_globals, 
**caller_locals
)  # type: ignore
92
local_namespace = {}  # type: typing.Dict[str, typing.Any]
93
exec(textwrap.dedent(s), global_namespace, local_namespace)
94
return local_namespace
...\util.py Изменение данных
88
# Flatten the real global and local namespace into our fake
89
# globals: it's all global from the perspective of code defined
90
# in s.
91
global_namespace = 
dict(caller_globals, **caller_locals)
  # type: ignore
92
local_namespace = {}  # type: typing.Dict[str, typing.Any]
93
exec(textwrap.dedent(s), global_namespace, local_namespace)
94
return local_namespace
...\util.py Изменение данных
88
# Flatten the real global and local namespace into our fake
89
# globals: it's all global from the perspective of code defined
90
# in s.
91

                                                                                                                
                                                                                                        
                                                                                                            
                                                                                                                
                                                                                                                    
global_namespace
 = dict(caller_globals, **caller_locals)  # type: ...
92
local_namespace = {}  # type: typing.Dict[str, typing.Any]
93
exec(textwrap.dedent(s), global_namespace, local_namespace)
94
return local_namespace
...\util.py Изменение данных
90
    # in s.
91
    global_namespace = dict(caller_globals, **caller_locals)  # type: ignore
92
    local_namespace = {}  # type: typing.Dict[str, typing.Any]
93
    exec(textwrap.dedent(s), 
global_namespace
, local_namespace)
94
    return local_namespace
97
def subTest(test, *args, **kwargs):
98
    """Compatibility shim for unittest.TestCase.subTest.
...\util.py Точка выхода
90
    # in s.
91
    global_namespace = dict(caller_globals, **caller_locals)  # type: ignore
92
    local_namespace = {}  # type: typing.Dict[str, typing.Any]
93
    
exec(textwrap.dedent(s), global_namespace, local_namespace)

                                                                                                                
                                                                                                        
                                                                                                        
94
    return local_namespace
97
def subTest(test, *args, **kwargs):
98
    """Compatibility shim for unittest.TestCase.subTest.
#a9rCvR14pzqarbpPZ/DA53WYHzo=
Идентификатор #652
Уязвимый файл
./tornado/test/util.py : 93
Входной файл
./tornado/test/util.py : 82
OWASP - A03 CWE-94
...\util.py Точка входа
77
    conn.close()
78
    server_socket.close()
79
    return (client_socket.close, client_addr[1])
82
def exec_te
s
t(caller_globals, caller_locals, s):
83
    """Execute ``s`` in a given context and return the result namespace.
85
    Used to define functions for tests in particular python
86
    versions that would be syntax errors in older versions.
...\util.py Точка входа данных
77
    conn.close()
78
    server_socket.close()
79
    return (client_socket.close, client_addr[1])
82
def exec_te
s
t(caller_globals, caller_locals, s):
83
    """Execute ``s`` in a given context and return the result namespace.
85
    Used to define functions for tests in particular python
86
    versions that would be syntax errors in older versions.
...\util.py Изменение данных
90
    # in s.
91
    global_namespace = dict(caller_globals, **caller_locals)  # type: ignore
92
    local_namespace = {}  # type: typing.Dict[str, typing.Any]
93
    exec(textwrap.dedent(
s
), global_namespace, local_namespace)
94
    return local_namespace
97
def subTest(test, *args, **kwargs):
98
    """Compatibility shim for unittest.TestCase.subTest.
...\util.py Изменение данных
90
    # in s.
91
    global_namespace = dict(caller_globals, **caller_locals)  # type: ignore
92
    local_namespace = {}  # type: typing.Dict[str, typing.Any]
93
    exec(
textwrap.dedent(s)
, global_namespace, local_namespace)
94
    return local_namespace
97
def subTest(test, *args, **kwargs):
98
    """Compatibility shim for unittest.TestCase.subTest.
...\util.py Точка выхода
90
    # in s.
91
    global_namespace = dict(caller_globals, **caller_locals)  # type: ignore
92
    local_namespace = {}  # type: typing.Dict[str, typing.Any]
93
    
exec(textwrap.dedent(s), global_namespace, local_namespace)

                                                                                                                
                                                                                                        
                                                                                                        
94
    return local_namespace
97
def subTest(test, *args, **kwargs):
98
    """Compatibility shim for unittest.TestCase.subTest.
Средняя
Межсайтовое выполнение сценариев
Описание уязвимости
Уязвимый код 156  self.render("entry.html", entry=entry)
#m5Aju4652+2GlHdqKnpupaV6/xA=
Идентификатор #484
Уязвимый файл
./demos/blog/blog.py : 156
Входной файл
./demos/blog/blog.py : 152
OWASP - A03 CWE-79
...\blog.py Точка входа
147
            return
148
        self.render("home.html", entries=entries)
151
class EntryHandler(BaseHandler):
152
    async def get(self, 
slug
):
153
        entry = await self.queryone("SELECT * FROM entries WHERE slug = %s", slug)
154
        if not entry:
155
            raise tornado.web.HTTPError(404)
...\blog.py Точка входа данных
147
            return
148
        self.render("home.html", entries=entries)
151
class EntryHandler(BaseHandler):
152
    async def get(self, 
slug
):
153
        entry = await self.queryone("SELECT * FROM entries WHERE slug = %s", slug)
154
        if not entry:
155
            raise tornado.web.HTTPError(404)
...\blog.py Изменение данных
148
        self.render("home.html", entries=entries)
151
class EntryHandler(BaseHandler):
152
    async def get(self, slug):
153
... await self.queryone("SELECT * FROM entries WHERE 
slug
 = %s", slug)
154
        if not entry:
155
            raise tornado.web.HTTPError(404)
156
        self.render("entry.html", entry=entry)
...\blog.py Изменение данных
148
        self.render("home.html", entries=entries)
151
class EntryHandler(BaseHandler):
152
    async def get(self, slug):
153
        entry = await 
self.queryone("SELECT * FROM entries WHERE slug = %s", slug)

                                                                                                                
                                                                                                        
                                                                                                        
154
        if not entry:
155
            raise tornado.web.HTTPError(404)
156
        self.render("entry.html", entry=entry)
...\blog.py Изменение данных
148
        self.render("home.html", entries=entries)
151
class EntryHandler(BaseHandler):
152
    async def get(self, slug):
153
        entry = 
await self.queryone("SELECT * FROM entries WHERE slug = %s", slug)

                                                                                                                
                                                                                                        
                                                                                                        
154
        if not entry:
155
            raise tornado.web.HTTPError(404)
156
        self.render("entry.html", entry=entry)
...\blog.py Изменение данных
148
        self.render("home.html", entries=entries)
151
class EntryHandler(BaseHandler):
152
    async def get(self, slug):
153
        
entry
 = await self.queryone("SELECT * FROM entries WHER...
154
        if not entry:
155
            raise tornado.web.HTTPError(404)
156
        self.render("entry.html", entry=entry)
...\blog.py Изменение данных
153
        entry = await self.queryone("SELECT * FROM entries WHERE slug = %s", slug)
154
        if not entry:
155
            raise tornado.web.HTTPError(404)
156
        self.render("
entry
.html", entry=entry)
159
class ArchiveHandler(BaseHandler):
160
    async def get(self):
161
        entries = await self.query("SELECT * FROM entries ORDER BY published DESC")
...\blog.py Точка выхода
153
        entry = await self.queryone("SELECT * FROM entries WHERE slug = %s", slug)
154
        if not entry:
155
            raise tornado.web.HTTPError(404)
156
        
self.render("entry.html", entry=entry)

                                                                                                                
                                                                                                        
                                                                                                        
159
class ArchiveHandler(BaseHandler):
160
    async def get(self):
161
        entries = await self.query("SELECT * FROM entries ORDER BY published DESC")
Средняя
Межсайтовое выполнение сценариев
Описание уязвимости
Уязвимый код 1798  self._active_modules[name].render(*args, **kwargs)
#eoefSBdCwrV3CY+Lfgy1MxOmlTs=
Идентификатор #486
Уязвимый файл
./tornado/web.py : 1798
Входной файл
./tornado/web.py : 1793
OWASP - A03 CWE-79
...\web.py Точка входа
1789
            exc_info=(typ, value, tb),
1790
        )
1792
def _ui_module(self, name: str, module: Type["UIModule"]) -> Callable[..., str]:
1793
    def render(*
args
, **kwargs) -> str:  # type: ignore
1794
        if not hasattr(self, "_active_modules"):
1795
            self._active_modules = {}  # type: Dict[str, UIModule]
1796
        if name not in self._active_modules:
...\web.py Точка входа данных
1789
            exc_info=(typ, value, tb),
1790
        )
1792
def _ui_module(self, name: str, module: Type["UIModule"]) -> Callable[..., str]:
1793
    def render(*
args
, **kwargs) -> str:  # type: ignore
1794
        if not hasattr(self, "_active_modules"):
1795
            self._active_modules = {}  # type: Dict[str, UIModule]
1796
        if name not in self._active_modules:
...\web.py Изменение данных
1795
            self._active_modules = {}  # type: Dict[str, UIModule]
1796
        if name not in self._active_modules:
1797
            self._active_modules[name] = module(self)
1798
...    rendered = self._active_modules[name].render(*
args
, **kwargs)
1799
        return rendered
1801
    return render
1803
def _ui_method(self, method: Callable[..., str]) -> Callable[..., str]:
...\web.py Изменение данных
1795
            self._active_modules = {}  # type: Dict[str, UIModule]
1796
        if name not in self._active_modules:
1797
            self._active_modules[name] = module(self)
1798
...     rendered = self._active_modules[name].render(
*args
, **kwargs)
1799
        return rendered
1801
    return render
1803
def _ui_method(self, method: Callable[..., str]) -> Callable[..., str]:
...\web.py Точка выхода
1795
            self._active_modules = {}  # type: Dict[str, UIModule]
1796
        if name not in self._active_modules:
1797
            self._active_modules[name] = module(self)
1798
        rendered = 
self._active_modules[name].render(*args, **kwargs)

                                                                                                                
                                                                                                        
                                                                                                        
1799
        return rendered
1801
    return render
1803
def _ui_method(self, method: Callable[..., str]) -> Callable[..., str]:
#ZJykp8UnbyGUgjMELlDvuAOAU0k=
Идентификатор #487
Уязвимый файл
./tornado/web.py : 1798
Входной файл
./tornado/web.py : 1793
OWASP - A03 CWE-79
...\web.py Точка входа
1789
            exc_info=(typ, value, tb),
1790
        )
1792
def _ui_module(self, name: str, module: Type["UIModule"]) -> Callable[..., str]:
1793
    def render(*args, **
kwargs
) -> str:  # type: ignore
1794
        if not hasattr(self, "_active_modules"):
1795
            self._active_modules = {}  # type: Dict[str, UIModule]
1796
        if name not in self._active_modules:
...\web.py Точка входа данных
1789
            exc_info=(typ, value, tb),
1790
        )
1792
def _ui_module(self, name: str, module: Type["UIModule"]) -> Callable[..., str]:
1793
    def render(*args, **
kwargs
) -> str:  # type: ignore
1794
        if not hasattr(self, "_active_modules"):
1795
            self._active_modules = {}  # type: Dict[str, UIModule]
1796
        if name not in self._active_modules:
...\web.py Изменение данных
1795
            self._active_modules = {}  # type: Dict[str, UIModule]
1796
        if name not in self._active_modules:
1797
            self._active_modules[name] = module(self)
1798
...ered = self._active_modules[name].render(*args, **
kwargs
)
1799
        return rendered
1801
    return render
1803
def _ui_method(self, method: Callable[..., str]) -> Callable[..., str]:
...\web.py Изменение данных
1795
            self._active_modules = {}  # type: Dict[str, UIModule]
1796
        if name not in self._active_modules:
1797
            self._active_modules[name] = module(self)
1798
...ndered = self._active_modules[name].render(*args, 
**kwargs
)
1799
        return rendered
1801
    return render
1803
def _ui_method(self, method: Callable[..., str]) -> Callable[..., str]:
...\web.py Точка выхода
1795
            self._active_modules = {}  # type: Dict[str, UIModule]
1796
        if name not in self._active_modules:
1797
            self._active_modules[name] = module(self)
1798
        rendered = 
self._active_modules[name].render(*args, **kwargs)

                                                                                                                
                                                                                                        
                                                                                                        
1799
        return rendered
1801
    return render
1803
def _ui_method(self, method: Callable[..., str]) -> Callable[..., str]:
Средняя
Открытое перенаправление
Описание уязвимости
Уязвимый код 114  handler.redirect(endpoint + "?" + urllib.parse.urlencode(args))
#gbLToY8sYer/lzT7XlsjirZp9JQ=
Идентификатор #338
Уязвимый файл
./tornado/auth.py : 114
Входной файл
./tornado/auth.py : 90
OWASP - A01 CWE-601
...\auth.py Точка входа
86
"""
88
def authenticate_redirect(
89
    self,
90
    
callback_uri
: Optional[str] = None,
91
    ax_attrs: List[str] = ["name", "email", "language", "username"],
92
) -> None:
93
    """Redirects to the authentication URL for this service.
...\auth.py Точка входа данных
86
"""
88
def authenticate_redirect(
89
    self,
90
    
callback_uri
: Optional[str] = None,
91
    ax_attrs: List[str] = ["name", "email", "language", "username"],
92
) -> None:
93
    """Redirects to the authentication URL for this service.
...\auth.py Изменение данных
107
    synchronous function.
108
"""
109
handler = cast(RequestHandler, self)
110

                                                                                                                
                                                                                                        
                                                                                                            
                                                                                                                
                                                                                                                    
callback_uri
 = callback_uri or handler.request.uri
111
assert callback_uri is not None
112
args = self._openid_args(callback_uri, ax_attrs=ax_attrs)
113
endpoint = self._OPENID_ENDPOINT  # type: ignore
...\auth.py Изменение данных
107
    synchronous function.
108
"""
109
handler = cast(RequestHandler, self)
110
callback_uri = 
callback_uri or handler.request.uri

                                                                                                                
                                                                                                        
                                                                                                        
111
assert callback_uri is not None
112
args = self._openid_args(callback_uri, ax_attrs=ax_attrs)
113
endpoint = self._OPENID_ENDPOINT  # type: ignore
...\auth.py Изменение данных
107
    synchronous function.
108
"""
109
handler = cast(RequestHandler, self)
110

                                                                                                                
                                                                                                        
                                                                                                            
                                                                                                                
                                                                                                                    
callback_uri
 = callback_uri or handler.request.uri
111
assert callback_uri is not None
112
args = self._openid_args(callback_uri, ax_attrs=ax_attrs)
113
endpoint = self._OPENID_ENDPOINT  # type: ignore
...\auth.py Изменение данных
109
    handler = cast(RequestHandler, self)
110
    callback_uri = callback_uri or handler.request.uri
111
    assert callback_uri is not None
112
    args = self._openid_args(
callback_uri
, ax_attrs=ax_attrs)
113
    endpoint = self._OPENID_ENDPOINT  # type: ignore
114
    handler.redirect(endpoint + "?" + urllib.parse.urlencode(args))
116
async def get_authenticated_user(
...\auth.py Изменение данных
145
    )
146
    return self._on_authentication_verified(resp)
148
def _openid_args(
149
    
self
,
150
    callback_uri: str,
151
    ax_attrs: Iterable[str] = [],
152
    oauth_scope: Optional[str] = None,
...\auth.py Изменение данных
151
    ax_attrs: Iterable[str] = [],
152
    oauth_scope: Optional[str] = None,
153
) -> Dict[str, str]:
154
    handler = cast(RequestHandler, 
self
)
155
    url = urllib.parse.urljoin(handler.request.full_url(), callback_uri)
156
    args = {
157
        "openid.ns": "http://specs.openid.net/auth/2.0",
...\auth.py Изменение данных
151
    ax_attrs: Iterable[str] = [],
152
    oauth_scope: Optional[str] = None,
153
) -> Dict[str, str]:
154
    handler = 
cast(RequestHandler, self)

                                                                                                                
                                                                                                        
                                                                                                        
155
    url = urllib.parse.urljoin(handler.request.full_url(), callback_uri)
156
    args = {
157
        "openid.ns": "http://specs.openid.net/auth/2.0",
...\auth.py Изменение данных
151
    ax_attrs: Iterable[str] = [],
152
    oauth_scope: Optional[str] = None,
153
) -> Dict[str, str]:
154
    
handler
 = cast(RequestHandler, self)
155
    url = urllib.parse.urljoin(handler.request.full_url(), callback_uri)
156
    args = {
157
        "openid.ns": "http://specs.openid.net/auth/2.0",
...\auth.py Изменение данных
152
    oauth_scope: Optional[str] = None,
153
) -> Dict[str, str]:
154
    handler = cast(RequestHandler, self)
155
    url = urllib.parse.urljoin(
handler.request.full_url
(), callback_uri)
156
    args = {
157
        "openid.ns": "http://specs.openid.net/auth/2.0",
158
        "openid.claimed_id": "http://specs.openid.net/auth/2.0/identifier_select",
...\auth.py Изменение данных
152
    oauth_scope: Optional[str] = None,
153
) -> Dict[str, str]:
154
    handler = cast(RequestHandler, self)
155
    url = urllib.parse.urljoin(
handler.request.full_url()
, callback_uri)
156
    args = {
157
        "openid.ns": "http://specs.openid.net/auth/2.0",
158
        "openid.claimed_id": "http://specs.openid.net/auth/2.0/identifier_select",
...\auth.py Изменение данных
152
    oauth_scope: Optional[str] = None,
153
) -> Dict[str, str]:
154
    handler = cast(RequestHandler, self)
155
    url = 
urllib.parse.urljoin(handler.request.full_url(), callback_uri)

                                                                                                                
                                                                                                        
                                                                                                        
156
    args = {
157
        "openid.ns": "http://specs.openid.net/auth/2.0",
158
        "openid.claimed_id": "http://specs.openid.net/auth/2.0/identifier_select",
...\auth.py Изменение данных
152
    oauth_scope: Optional[str] = None,
153
) -> Dict[str, str]:
154
    handler = cast(RequestHandler, self)
155
    
url
 = urllib.parse.urljoin(handler.request.full_url()...
156
    args = {
157
        "openid.ns": "http://specs.openid.net/auth/2.0",
158
        "openid.claimed_id": "http://specs.openid.net/auth/2.0/identifier_select",
...\auth.py Изменение данных
157
    "openid.ns": "http://specs.openid.net/auth/2.0",
158
    "openid.claimed_id": "http://specs.openid.net/auth/2.0/identifier_select",
159
    "openid.identity": "http://specs.openid.net/auth/2.0/identifier_select",
160
    "openid.return_to": 
url
,
161
    "openid.realm": urllib.parse.urljoin(url, "/"),
162
    "openid.mode": "checkid_setup",
163
}
...\auth.py Изменение данных
157
    "openid.ns": "http://specs.openid.net/auth/2.0",
158
    "openid.claimed_id": "http://specs.openid.net/auth/2.0/identifier_select",
159
    "openid.identity": "http://specs.openid.net/auth/2.0/identifier_select",
160
    
"openid.return_to"
: url,
161
    "openid.realm": urllib.parse.urljoin(url, "/"),
162
    "openid.mode": "checkid_setup",
163
}
...\auth.py Изменение данных
153
) -> Dict[str, str]:
154
    handler = cast(RequestHandler, self)
155
    url = urllib.parse.urljoin(handler.request.full_url(), callback_uri)
156

                                                                                                                
                                                                                                        
                                                                                                            
                                                                                                                
                                                                                                                    
    args = {

                                                                                                                
                                                                                                        
                                                                                                        
157
        "openid.ns": "http://specs.openid.net/auth/2.0",
158
        "openid.claimed_id": "http://specs.openid.net/auth/2.0/identifier_select",
159
        "openid.identity": "http://specs.openid.net/auth/2.0/identifier_select",
...\auth.py Изменение данных
153
) -> Dict[str, str]:
154
    handler = cast(RequestHandler, self)
155
    url = urllib.parse.urljoin(handler.request.full_url(), callback_uri)
156
    
args
 = {
157
        "openid.ns": "http://specs.openid.net/auth/2.0",
158
        "openid.claimed_id": "http://specs.openid.net/auth/2.0/identifier_select",
159
        "openid.identity": "http://specs.openid.net/auth/2.0/identifier_select",
...\auth.py Изменение данных
162
    "openid.mode": "checkid_setup",
163
}
164
if ax_attrs:
165
    
args.update
(
166
        {
167
            "openid.ns.ax": "http://openid.net/srv/ax/1.0",
168
            "openid.ax.mode": "fetch_request",
...\auth.py Изменение данных
162
    "openid.mode": "checkid_setup",
163
}
164
if ax_attrs:
165

                                                                                                                
                                                                                                        
                                                                                                            
                                                                                                                
                                                                                                                    
    args.update(

                                                                                                                
                                                                                                        
                                                                                                        
166
        {
167
            "openid.ns.ax": "http://openid.net/srv/ax/1.0",
168
            "openid.ax.mode": "fetch_request",
...\auth.py Изменение данных
173
if "name" in ax_attrs:
174
    ax_attrs -= set(["name", "firstname", "fullname", "lastname"])
175
    required += ["firstname", "fullname", "lastname"]
176
    
args.update
(
177
        {
178
            "openid.ax.type.firstname": "http://axschema.org/namePerson/first",
179
            "openid.ax.type.fullname": "http://axschema.org/namePerson",
...\auth.py Изменение данных
173
if "name" in ax_attrs:
174
    ax_attrs -= set(["name", "firstname", "fullname", "lastname"])
175
    required += ["firstname", "fullname", "lastname"]
176

                                                                                                                
                                                                                                        
                                                                                                            
                                                                                                                
                                                                                                                    
    args.update(

                                                                                                                
                                                                                                        
                                                                                                        
177
        {
178
            "openid.ax.type.firstname": "http://axschema.org/namePerson/first",
179
            "openid.ax.type.fullname": "http://axschema.org/namePerson",
...\auth.py Изменение данных
186
        "username": "http://axschema.org/namePerson/friendly",
187
    }
188
    for name in ax_attrs:
189
        
args
["openid.ax.type." + name] = known_attrs[name]
190
        required.append(name)
191
    args["openid.ax.required"] = ",".join(required)
192
if oauth_scope:
...\auth.py Изменение данных
186
        "username": "http://axschema.org/namePerson/friendly",
187
    }
188
    for name in ax_attrs:
189
        
args["openid.ax.type." + name]
 = known_attrs[name]
190
        required.append(name)
191
    args["openid.ax.required"] = ",".join(required)
192
if oauth_scope:
...\auth.py Изменение данных
188
    for name in ax_attrs:
189
        args["openid.ax.type." + name] = known_attrs[name]
190
        required.append(name)
191
    
args
["openid.ax.required"] = ",".join(required)
192
if oauth_scope:
193
    args.update(
194
        {
...\auth.py Изменение данных
188
    for name in ax_attrs:
189
        args["openid.ax.type." + name] = known_attrs[name]
190
        required.append(name)
191
    
args["openid.ax.required"]
 = ",".join(required)
192
if oauth_scope:
193
    args.update(
194
        {
...\auth.py Изменение данных
197
                "openid.oauth.scope": oauth_scope,
198
            }
199
        )
200
    return 
args

                                                                                                                
                                                                                                        
                                                                                                        
202
def _on_authentication_verified(
203
    self, response: httpclient.HTTPResponse
204
) -> Dict[str, Any]:
...\auth.py Изменение данных
109
    handler = cast(RequestHandler, self)
110
    callback_uri = callback_uri or handler.request.uri
111
    assert callback_uri is not None
112
    
args
 = self._openid_args(callback_uri, ax_attrs=ax_att...
113
    endpoint = self._OPENID_ENDPOINT  # type: ignore
114
    handler.redirect(endpoint + "?" + urllib.parse.urlencode(args))
116
async def get_authenticated_user(
...\auth.py Изменение данных
111
    assert callback_uri is not None
112
    args = self._openid_args(callback_uri, ax_attrs=ax_attrs)
113
    endpoint = self._OPENID_ENDPOINT  # type: ignore
114
....redirect(endpoint + "?" + urllib.parse.urlencode(
args
))
116
async def get_authenticated_user(
117
    self, http_client: Optional[httpclient.AsyncHTTPClient] = None
118
) -> Dict[str, Any]:
...\auth.py Изменение данных
111
    assert callback_uri is not None
112
    args = self._openid_args(callback_uri, ax_attrs=ax_attrs)
113
    endpoint = self._OPENID_ENDPOINT  # type: ignore
114
    handler.redirect(endpoint + "?" + 
urllib.parse.urlencode(args)
)
116
async def get_authenticated_user(
117
    self, http_client: Optional[httpclient.AsyncHTTPClient] = None
118
) -> Dict[str, Any]:
...\auth.py Изменение данных
111
    assert callback_uri is not None
112
    args = self._openid_args(callback_uri, ax_attrs=ax_attrs)
113
    endpoint = self._OPENID_ENDPOINT  # type: ignore
114
    handler.redirect(
endpoint + "?" + urllib.parse.urlencode(args)
)
116
async def get_authenticated_user(
117
    self, http_client: Optional[httpclient.AsyncHTTPClient] = None
118
) -> Dict[str, Any]:
...\auth.py Точка выхода
111
    assert callback_uri is not None
112
    args = self._openid_args(callback_uri, ax_attrs=ax_attrs)
113
    endpoint = self._OPENID_ENDPOINT  # type: ignore
114
    
handler.redirect(endpoint + "?" + urllib.parse.urlencode(args))

                                                                                                                
                                                                                                        
                                                                                                        
116
async def get_authenticated_user(
117
    self, http_client: Optional[httpclient.AsyncHTTPClient] = None
118
) -> Dict[str, Any]:
Средняя
Открытое перенаправление
Описание уязвимости
Уязвимый код 438  handler.redirect(authorize_url + "?" + urllib.parse.urlencode(args))
#EEGRLvxwBv0+1l0sFfhYzSiYBN0=
Идентификатор #340
Уязвимый файл
./tornado/auth.py : 438
Входной файл
./tornado/auth.py : 418
OWASP - A01 CWE-601
...\auth.py Точка входа
414
    return url + "?" + urllib.parse.urlencode(args)
416
def _on_request_token(
417
    self,
418
    
authorize_url
: str,
419
    callback_uri: Optional[str],
420
    response: httpclient.HTTPResponse,
421
) -> None:
...\auth.py Точка входа данных
414
    return url + "?" + urllib.parse.urlencode(args)
416
def _on_request_token(
417
    self,
418
    
authorize_url
: str,
419
    callback_uri: Optional[str],
420
    response: httpclient.HTTPResponse,
421
) -> None:
...\auth.py Изменение данных
435
        args["oauth_callback"] = urllib.parse.urljoin(
436
            handler.request.full_url(), callback_uri
437
        )
438
    handler.redirect(
authorize_url
 + "?" + urllib.parse.urlencode(args))
440
def _oauth_access_token_url(self, request_token: Dict[str, Any]) -> str:
441
    consumer_token = self._oauth_consumer_token()
442
    url = self._OAUTH_ACCESS_TOKEN_URL  # type: ignore
...\auth.py Изменение данных
435
        args["oauth_callback"] = urllib.parse.urljoin(
436
            handler.request.full_url(), callback_uri
437
        )
438
    handler.redirect(
authorize_url + "?" + urllib.parse.urlencode(args)
)
440
def _oauth_access_token_url(self, request_token: Dict[str, Any]) -> str:
441
    consumer_token = self._oauth_consumer_token()
442
    url = self._OAUTH_ACCESS_TOKEN_URL  # type: ignore
...\auth.py Точка выхода
435
        args["oauth_callback"] = urllib.parse.urljoin(
436
            handler.request.full_url(), callback_uri
437
        )
438
    
handler.redirect(authorize_url + "?" + urllib.parse.urlencode(args))

                                                                                                                
                                                                                                        
                                                                                                        
440
def _oauth_access_token_url(self, request_token: Dict[str, Any]) -> str:
441
    consumer_token = self._oauth_consumer_token()
442
    url = self._OAUTH_ACCESS_TOKEN_URL  # type: ignore
#LMr4kPsmpgBFWJEbOcrpvM8PpO8=
Идентификатор #342
Уязвимый файл
./tornado/auth.py : 438
Входной файл
./tornado/auth.py : 419
OWASP - A01 CWE-601
...\auth.py Точка входа
416
def _on_request_token(
417
    self,
418
    authorize_url: str,
419
    
callback_uri
: Optional[str],
420
    response: httpclient.HTTPResponse,
421
) -> None:
422
    handler = cast(RequestHandler, self)
...\auth.py Точка входа данных
416
def _on_request_token(
417
    self,
418
    authorize_url: str,
419
    
callback_uri
: Optional[str],
420
    response: httpclient.HTTPResponse,
421
) -> None:
422
    handler = cast(RequestHandler, self)
...\auth.py Изменение данных
433
        return
434
    elif callback_uri:
435
        args["oauth_callback"] = urllib.parse.urljoin(
436
            handler.request.full_url(), 
callback_uri

                                                                                                                
                                                                                                        
                                                                                                        
437
        )
438
    handler.redirect(authorize_url + "?" + urllib.parse.urlencode(args))
440
def _oauth_access_token_url(self, request_token: Dict[str, Any]) -> str:
...\auth.py Изменение данных
432
    handler.finish(authorize_url + "?" + urllib.parse.urlencode(args))
433
    return
434
elif callback_uri:
435

                                                                                                                
                                                                                                        
                                                                                                            
                                                                                                                
                                                                                                                    
    args["oauth_callback"] = urllib.parse.urljoin(

                                                                                                                
                                                                                                        
                                                                                                        
436
        handler.request.full_url(), callback_uri
437
    )
438
handler.redirect(authorize_url + "?" + urllib.parse.urlencode(args))
...\auth.py Изменение данных
432
    handler.finish(authorize_url + "?" + urllib.parse.urlencode(args))
433
    return
434
elif callback_uri:
435
    
args["oauth_callback"]
 = urllib.parse.urljoin(
436
        handler.request.full_url(), callback_uri
437
    )
438
handler.redirect(authorize_url + "?" + urllib.parse.urlencode(args))
...\auth.py Изменение данных
435
        args["oauth_callback"] = urllib.parse.urljoin(
436
            handler.request.full_url(), callback_uri
437
        )
438
...rect(authorize_url + "?" + urllib.parse.urlencode(
args
))
440
def _oauth_access_token_url(self, request_token: Dict[str, Any]) -> str:
441
    consumer_token = self._oauth_consumer_token()
442
    url = self._OAUTH_ACCESS_TOKEN_URL  # type: ignore
...\auth.py Изменение данных
435
        args["oauth_callback"] = urllib.parse.urljoin(
436
            handler.request.full_url(), callback_uri
437
        )
438
    handler.redirect(authorize_url + "?" + 
urllib.parse.urlencode(args)
)
440
def _oauth_access_token_url(self, request_token: Dict[str, Any]) -> str:
441
    consumer_token = self._oauth_consumer_token()
442
    url = self._OAUTH_ACCESS_TOKEN_URL  # type: ignore
...\auth.py Изменение данных
435
        args["oauth_callback"] = urllib.parse.urljoin(
436
            handler.request.full_url(), callback_uri
437
        )
438
    handler.redirect(
authorize_url + "?" + urllib.parse.urlencode(args)
)
440
def _oauth_access_token_url(self, request_token: Dict[str, Any]) -> str:
441
    consumer_token = self._oauth_consumer_token()
442
    url = self._OAUTH_ACCESS_TOKEN_URL  # type: ignore
...\auth.py Точка выхода
435
        args["oauth_callback"] = urllib.parse.urljoin(
436
            handler.request.full_url(), callback_uri
437
        )
438
    
handler.redirect(authorize_url + "?" + urllib.parse.urlencode(args))

                                                                                                                
                                                                                                        
                                                                                                        
440
def _oauth_access_token_url(self, request_token: Dict[str, Any]) -> str:
441
    consumer_token = self._oauth_consumer_token()
442
    url = self._OAUTH_ACCESS_TOKEN_URL  # type: ignore
#ak+Fh8N8tURjgw2Co0yjSn4hu6o=
Идентификатор #345
Уязвимый файл
./tornado/auth.py : 438
Входной файл
./tornado/auth.py : 420
OWASP - A01 CWE-601
...\auth.py Точка входа
417
    self,
418
    authorize_url: str,
419
    callback_uri: Optional[str],
420
    
response
: httpclient.HTTPResponse,
421
) -> None:
422
    handler = cast(RequestHandler, self)
423
    request_token = _oauth_parse_response(response.body)
...\auth.py Точка входа данных
417
    self,
418
    authorize_url: str,
419
    callback_uri: Optional[str],
420
    
response
: httpclient.HTTPResponse,
421
) -> None:
422
    handler = cast(RequestHandler, self)
423
    request_token = _oauth_parse_response(response.body)
...\auth.py Изменение данных
420
    response: httpclient.HTTPResponse,
421
) -> None:
422
    handler = cast(RequestHandler, self)
423
    request_token = _oauth_parse_response(
response.body
)
424
    data = (
425
        base64.b64encode(escape.utf8(request_token["key"]))
426
        + b"|"
...\auth.py Изменение данных
1171
    if isinstance(val, unicode_type):
1172
        val = val.encode("utf-8")
1173
    return urllib.parse.quote(val, safe="~")
1176
def _oauth_parse_response(
body
: bytes) -> Dict[str, Any]:
1177
    # I can't find an officially-defined encoding for oauth responses and
1178
    # have never seen anyone use non-ascii.  Leave the response in a byte
1179
    # string for python 2, and use utf8 on python 3.
...\auth.py Изменение данных
1177
# I can't find an officially-defined encoding for oauth responses and
1178
# have never seen anyone use non-ascii.  Leave the response in a byte
1179
# string for python 2, and use utf8 on python 3.
1180

                                                                                                                
                                                                                                        
                                                                                                            
                                                                                                                
                                                                                                                    
body
_str = escape.native_str(body)
1181
p = urllib.parse.parse_qs(body_str, keep_blank_values=False)
1182
token = dict(key=p["oauth_token"][0], secret=p["oauth_token_secret"][0])
1184
# Add the extra parameters the Provider included to the token
...\auth.py Изменение данных
1177
# I can't find an officially-defined encoding for oauth responses and
1178
# have never seen anyone use non-ascii.  Leave the response in a byte
1179
# string for python 2, and use utf8 on python 3.
1180
body_str = 
escape.native_str(body)

                                                                                                                
                                                                                                        
                                                                                                        
1181
p = urllib.parse.parse_qs(body_str, keep_blank_values=False)
1182
token = dict(key=p["oauth_token"][0], secret=p["oauth_token_secret"][0])
1184
# Add the extra parameters the Provider included to the token
...\auth.py Изменение данных
1177
# I can't find an officially-defined encoding for oauth responses and
1178
# have never seen anyone use non-ascii.  Leave the response in a byte
1179
# string for python 2, and use utf8 on python 3.
1180

                                                                                                                
                                                                                                        
                                                                                                            
                                                                                                                
                                                                                                                    
body_str
 = escape.native_str(body)
1181
p = urllib.parse.parse_qs(body_str, keep_blank_values=False)
1182
token = dict(key=p["oauth_token"][0], secret=p["oauth_token_secret"][0])
1184
# Add the extra parameters the Provider included to the token
...\auth.py Изменение данных
1178
# have never seen anyone use non-ascii.  Leave the response in a byte
1179
# string for python 2, and use utf8 on python 3.
1180
body_str = escape.native_str(body)
1181
p = urllib.parse.parse_qs(
body_str
, keep_blank_values=False)
1182
token = dict(key=p["oauth_token"][0], secret=p["oauth_token_secret"][0])
1184
# Add the extra parameters the Provider included to the token
1185
special = ("oauth_token", "oauth_token_secret")
...\auth.py Изменение данных
1178
# have never seen anyone use non-ascii.  Leave the response in a byte
1179
# string for python 2, and use utf8 on python 3.
1180
body_str = escape.native_str(body)
1181
p = 
urllib.parse.parse_qs(body_str, keep_blank_values=False)

                                                                                                                
                                                                                                        
                                                                                                        
1182
token = dict(key=p["oauth_token"][0], secret=p["oauth_token_secret"][0])
1184
# Add the extra parameters the Provider included to the token
1185
special = ("oauth_token", "oauth_token_secret")
...\auth.py Изменение данных
1178
# have never seen anyone use non-ascii.  Leave the response in a byte
1179
# string for python 2, and use utf8 on python 3.
1180
body_str = escape.native_str(body)
1181

                                                                                                                
                                                                                                        
                                                                                                            
                                                                                                                
                                                                                                                    
p
 = urllib.parse.parse_qs(body_str, keep_blank_valu...
1182
token = dict(key=p["oauth_token"][0], secret=p["oauth_token_secret"][0])
1184
# Add the extra parameters the Provider included to the token
1185
special = ("oauth_token", "oauth_token_secret")
...\auth.py Изменение данных
1179
# string for python 2, and use utf8 on python 3.
1180
body_str = escape.native_str(body)
1181
p = urllib.parse.parse_qs(body_str, keep_blank_values=False)
1182
token = dict(key=
p
["oauth_token"][0], secret=p["oauth_token_secret"]...
1184
# Add the extra parameters the Provider included to the token
1185
special = ("oauth_token", "oauth_token_secret")
1186
token.update((k, p[k][0]) for k in p if k not in special)
...\auth.py Изменение данных
1179
# string for python 2, and use utf8 on python 3.
1180
body_str = escape.native_str(body)
1181
p = urllib.parse.parse_qs(body_str, keep_blank_values=False)
1182
token = dict(key=
p["oauth_token"]
[0], secret=p["oauth_token_secret"][0])
1184
# Add the extra parameters the Provider included to the token
1185
special = ("oauth_token", "oauth_token_secret")
1186
token.update((k, p[k][0]) for k in p if k not in special)
...\auth.py Изменение данных
1179
# string for python 2, and use utf8 on python 3.
1180
body_str = escape.native_str(body)
1181
p = urllib.parse.parse_qs(body_str, keep_blank_values=False)
1182
token = dict(key=
p["oauth_token"][0]
, secret=p["oauth_token_secret"][0])
1184
# Add the extra parameters the Provider included to the token
1185
special = ("oauth_token", "oauth_token_secret")
1186
token.update((k, p[k][0]) for k in p if k not in special)
...\auth.py Изменение данных
1179
# string for python 2, and use utf8 on python 3.
1180
body_str = escape.native_str(body)
1181
p = urllib.parse.parse_qs(body_str, keep_blank_values=False)
1182
token = 
dict(key=p["oauth_token"][0], secret=p["oauth_token_secret"][0])

                                                                                                                
                                                                                                        
                                                                                                        
1184
# Add the extra parameters the Provider included to the token
1185
special = ("oauth_token", "oauth_token_secret")
1186
token.update((k, p[k][0]) for k in p if k not in special)
...\auth.py Изменение данных
1179
# string for python 2, and use utf8 on python 3.
1180
body_str = escape.native_str(body)
1181
p = urllib.parse.parse_qs(body_str, keep_blank_values=False)
1182

                                                                                                                
                                                                                                        
                                                                                                            
                                                                                                                
                                                                                                                    
token
 = dict(key=p["oauth_token"][0], secret=p["oauth_t...
1184
# Add the extra parameters the Provider included to the token
1185
special = ("oauth_token", "oauth_token_secret")
1186
token.update((k, p[k][0]) for k in p if k not in special)
...\auth.py Изменение данных
1182
token = dict(key=p["oauth_token"][0], secret=p["oauth_token_secret"][0])
1184
# Add the extra parameters the Provider included to the token
1185
special = ("oauth_token", "oauth_token_secret")
1186

                                                                                                                
                                                                                                        
                                                                                                            
                                                                                                                
                                                                                                                    
token.update
((k, p[k][0]) for k in p if k not in special)
1187
return token
...\auth.py Изменение данных
1182
token = dict(key=p["oauth_token"][0], secret=p["oauth_token_secret"][0])
1184
# Add the extra parameters the Provider included to the token
1185
special = ("oauth_token", "oauth_token_secret")
1186

                                                                                                                
                                                                                                        
                                                                                                            
                                                                                                                
                                                                                                                    
token.update((k, p[k][0]) for k in p if k not in special)

                                                                                                                
                                                                                                        
                                                                                                        
1187
return token
...\auth.py Изменение данных
1184
# Add the extra parameters the Provider included to the token
1185
special = ("oauth_token", "oauth_token_secret")
1186
token.update((k, p[k][0]) for k in p if k not in special)
1187
return 
token

                                                                                                                
                                                                                                        
                                                                                                        
...\auth.py Изменение данных
420
    response: httpclient.HTTPResponse,
421
) -> None:
422
    handler = cast(RequestHandler, self)
423
    
request_token
 = _oauth_parse_response(response.body)
424
    data = (
425
        base64.b64encode(escape.utf8(request_token["key"]))
426
        + b"|"
...\auth.py Изменение данных
427
    + base64.b64encode(escape.utf8(request_token["secret"]))
428
)
429
handler.set_cookie("_oauth_request_token", data)
430
args = dict(oauth_token=
request_token
["key"])
431
if callback_uri == "oob":
432
    handler.finish(authorize_url + "?" + urllib.parse.urlencode(args))
433
    return
...\auth.py Изменение данных
427
    + base64.b64encode(escape.utf8(request_token["secret"]))
428
)
429
handler.set_cookie("_oauth_request_token", data)
430
args = dict(oauth_token=
request_token["key"]
)
431
if callback_uri == "oob":
432
    handler.finish(authorize_url + "?" + urllib.parse.urlencode(args))
433
    return
...\auth.py Изменение данных
427
    + base64.b64encode(escape.utf8(request_token["secret"]))
428
)
429
handler.set_cookie("_oauth_request_token", data)
430
args = 
dict(oauth_token=request_token["key"])

                                                                                                                
                                                                                                        
                                                                                                        
431
if callback_uri == "oob":
432
    handler.finish(authorize_url + "?" + urllib.parse.urlencode(args))
433
    return
...\auth.py Изменение данных
427
    + base64.b64encode(escape.utf8(request_token["secret"]))
428
)
429
handler.set_cookie("_oauth_request_token", data)
430

                                                                                                                
                                                                                                        
                                                                                                            
                                                                                                                
                                                                                                                    
args
 = dict(oauth_token=request_token["key"])
431
if callback_uri == "oob":
432
    handler.finish(authorize_url + "?" + urllib.parse.urlencode(args))
433
    return
...\auth.py Изменение данных
432
    handler.finish(authorize_url + "?" + urllib.parse.urlencode(args))
433
    return
434
elif callback_uri:
435
    
args
["oauth_callback"] = urllib.parse.urljoin(
436
        handler.request.full_url(), callback_uri
437
    )
438
handler.redirect(authorize_url + "?" + urllib.parse.urlencode(args))
...\auth.py Изменение данных
432
    handler.finish(authorize_url + "?" + urllib.parse.urlencode(args))
433
    return
434
elif callback_uri:
435
    
args["oauth_callback"]
 = urllib.parse.urljoin(
436
        handler.request.full_url(), callback_uri
437
    )
438
handler.redirect(authorize_url + "?" + urllib.parse.urlencode(args))
...\auth.py Изменение данных
435
        args["oauth_callback"] = urllib.parse.urljoin(
436
            handler.request.full_url(), callback_uri
437
        )
438
...rect(authorize_url + "?" + urllib.parse.urlencode(
args
))
440
def _oauth_access_token_url(self, request_token: Dict[str, Any]) -> str:
441
    consumer_token = self._oauth_consumer_token()
442
    url = self._OAUTH_ACCESS_TOKEN_URL  # type: ignore
...\auth.py Изменение данных
435
        args["oauth_callback"] = urllib.parse.urljoin(
436
            handler.request.full_url(), callback_uri
437
        )
438
    handler.redirect(authorize_url + "?" + 
urllib.parse.urlencode(args)
)
440
def _oauth_access_token_url(self, request_token: Dict[str, Any]) -> str:
441
    consumer_token = self._oauth_consumer_token()
442
    url = self._OAUTH_ACCESS_TOKEN_URL  # type: ignore
...\auth.py Изменение данных
435
        args["oauth_callback"] = urllib.parse.urljoin(
436
            handler.request.full_url(), callback_uri
437
        )
438
    handler.redirect(
authorize_url + "?" + urllib.parse.urlencode(args)
)
440
def _oauth_access_token_url(self, request_token: Dict[str, Any]) -> str:
441
    consumer_token = self._oauth_consumer_token()
442
    url = self._OAUTH_ACCESS_TOKEN_URL  # type: ignore
...\auth.py Точка выхода
435
        args["oauth_callback"] = urllib.parse.urljoin(
436
            handler.request.full_url(), callback_uri
437
        )
438
    
handler.redirect(authorize_url + "?" + urllib.parse.urlencode(args))

                                                                                                                
                                                                                                        
                                                                                                        
440
def _oauth_access_token_url(self, request_token: Dict[str, Any]) -> str:
441
    consumer_token = self._oauth_consumer_token()
442
    url = self._OAUTH_ACCESS_TOKEN_URL  # type: ignore
Средняя
Открытое перенаправление
Описание уязвимости
Уязвимый код 586  handler.redirect(url_concat(url, args))
#7SOMP9uw+NOEMZWELTehj20k3J0=
Идентификатор #348
Уязвимый файл
./tornado/auth.py : 586
Входной файл
./tornado/auth.py : 555
OWASP - A01 CWE-601
...\auth.py Точка входа
551
"""
553
def authorize_redirect(
554
    self,
555
    
redirect_uri
: Optional[str] = None,
556
    client_id: Optional[str] = None,
557
    client_secret: Optional[str] = None,
558
    extra_params: Optional[Dict[str, Any]] = None,
...\auth.py Точка входа данных
551
"""
553
def authorize_redirect(
554
    self,
555
    
redirect_uri
: Optional[str] = None,
556
    client_id: Optional[str] = None,
557
    client_secret: Optional[str] = None,
558
    extra_params: Optional[Dict[str, Any]] = None,
...\auth.py Изменение данных
575
handler = cast(RequestHandler, self)
576
args = {"response_type": response_type}
577
if redirect_uri is not None:
578
    args["
redirect_uri
"] = redirect_uri
579
if client_id is not None:
580
    args["client_id"] = client_id
581
if extra_params:
...\auth.py Изменение данных
575
handler = cast(RequestHandler, self)
576
args = {"response_type": response_type}
577
if redirect_uri is not None:
578
    
args["redirect_uri"]
 = redirect_uri
579
if client_id is not None:
580
    args["client_id"] = client_id
581
if extra_params:
...\auth.py Изменение данных
583
    if scope:
584
        args["scope"] = " ".join(scope)
585
    url = self._OAUTH_AUTHORIZE_URL  # type: ignore
586
    handler.redirect(url_concat(url, 
args
))
588
def _oauth_request_token_url(
589
    self,
590
    redirect_uri: Optional[str] = None,
...\auth.py Изменение данных
583
    if scope:
584
        args["scope"] = " ".join(scope)
585
    url = self._OAUTH_AUTHORIZE_URL  # type: ignore
586
    handler.redirect(
url_concat(url, args)
)
588
def _oauth_request_token_url(
589
    self,
590
    redirect_uri: Optional[str] = None,
...\auth.py Точка выхода
583
    if scope:
584
        args["scope"] = " ".join(scope)
585
    url = self._OAUTH_AUTHORIZE_URL  # type: ignore
586
    
handler.redirect(url_concat(url, args))

                                                                                                                
                                                                                                        
                                                                                                        
588
def _oauth_request_token_url(
589
    self,
590
    redirect_uri: Optional[str] = None,
#qj3jT9R267M/prwvcG/LE3aq13E=
Идентификатор #351
Уязвимый файл
./tornado/auth.py : 586
Входной файл
./tornado/auth.py : 556
OWASP - A01 CWE-601
...\auth.py Точка входа
553
def authorize_redirect(
554
    self,
555
    redirect_uri: Optional[str] = None,
556
    
client_id
: Optional[str] = None,
557
    client_secret: Optional[str] = None,
558
    extra_params: Optional[Dict[str, Any]] = None,
559
    scope: Optional[str] = None,
...\auth.py Точка входа данных
553
def authorize_redirect(
554
    self,
555
    redirect_uri: Optional[str] = None,
556
    
client_id
: Optional[str] = None,
557
    client_secret: Optional[str] = None,
558
    extra_params: Optional[Dict[str, Any]] = None,
559
    scope: Optional[str] = None,
...\auth.py Изменение данных
577
if redirect_uri is not None:
578
    args["redirect_uri"] = redirect_uri
579
if client_id is not None:
580
    args["
client_id
"] = client_id
581
if extra_params:
582
    args.update(extra_params)
583
if scope:
...\auth.py Изменение данных
577
if redirect_uri is not None:
578
    args["redirect_uri"] = redirect_uri
579
if client_id is not None:
580
    
args["client_id"]
 = client_id
581
if extra_params:
582
    args.update(extra_params)
583
if scope:
...\auth.py Изменение данных
583
    if scope:
584
        args["scope"] = " ".join(scope)
585
    url = self._OAUTH_AUTHORIZE_URL  # type: ignore
586
    handler.redirect(url_concat(url, 
args
))
588
def _oauth_request_token_url(
589
    self,
590
    redirect_uri: Optional[str] = None,
...\auth.py Изменение данных
583
    if scope:
584
        args["scope"] = " ".join(scope)
585
    url = self._OAUTH_AUTHORIZE_URL  # type: ignore
586
    handler.redirect(
url_concat(url, args)
)
588
def _oauth_request_token_url(
589
    self,
590
    redirect_uri: Optional[str] = None,
...\auth.py Точка выхода
583
    if scope:
584
        args["scope"] = " ".join(scope)
585
    url = self._OAUTH_AUTHORIZE_URL  # type: ignore
586
    
handler.redirect(url_concat(url, args))

                                                                                                                
                                                                                                        
                                                                                                        
588
def _oauth_request_token_url(
589
    self,
590
    redirect_uri: Optional[str] = None,
#GmcTHmy61CQcg6uZ659t6FljOBU=
Идентификатор #354
Уязвимый файл
./tornado/auth.py : 586
Входной файл
./tornado/auth.py : 558
OWASP - A01 CWE-601
...\auth.py Точка входа
555
    redirect_uri: Optional[str] = None,
556
    client_id: Optional[str] = None,
557
    client_secret: Optional[str] = None,
558
    
extra_params
: Optional[Dict[str, Any]] = None,
559
    scope: Optional[str] = None,
560
    response_type: str = "code",
561
) -> None:
...\auth.py Точка входа данных
555
    redirect_uri: Optional[str] = None,
556
    client_id: Optional[str] = None,
557
    client_secret: Optional[str] = None,
558
    
extra_params
: Optional[Dict[str, Any]] = None,
559
    scope: Optional[str] = None,
560
    response_type: str = "code",
561
) -> None:
...\auth.py Изменение данных
579
if client_id is not None:
580
    args["client_id"] = client_id
581
if extra_params:
582
    args.update(
extra_params
)
583
if scope:
584
    args["scope"] = " ".join(scope)
585
url = self._OAUTH_AUTHORIZE_URL  # type: ignore
...\auth.py Изменение данных
579
if client_id is not None:
580
    args["client_id"] = client_id
581
if extra_params:
582
    
args.update(extra_params)

                                                                                                                
                                                                                                        
                                                                                                        
583
if scope:
584
    args["scope"] = " ".join(scope)
585
url = self._OAUTH_AUTHORIZE_URL  # type: ignore
...\auth.py Изменение данных
581
    if extra_params:
582
        args.update(extra_params)
583
    if scope:
584
        
args
["scope"] = " ".join(scope)
585
    url = self._OAUTH_AUTHORIZE_URL  # type: ignore
586
    handler.redirect(url_concat(url, args))
588
def _oauth_request_token_url(
...\auth.py Изменение данных
581
    if extra_params:
582
        args.update(extra_params)
583
    if scope:
584
        
args["scope"]
 = " ".join(scope)
585
    url = self._OAUTH_AUTHORIZE_URL  # type: ignore
586
    handler.redirect(url_concat(url, args))
588
def _oauth_request_token_url(
...\auth.py Изменение данных
583
    if scope:
584
        args["scope"] = " ".join(scope)
585
    url = self._OAUTH_AUTHORIZE_URL  # type: ignore
586
    handler.redirect(url_concat(url, 
args
))
588
def _oauth_request_token_url(
589
    self,
590
    redirect_uri: Optional[str] = None,
...\auth.py Изменение данных
583
    if scope:
584
        args["scope"] = " ".join(scope)
585
    url = self._OAUTH_AUTHORIZE_URL  # type: ignore
586
    handler.redirect(
url_concat(url, args)
)
588
def _oauth_request_token_url(
589
    self,
590
    redirect_uri: Optional[str] = None,
...\auth.py Точка выхода
583
    if scope:
584
        args["scope"] = " ".join(scope)
585
    url = self._OAUTH_AUTHORIZE_URL  # type: ignore
586
    
handler.redirect(url_concat(url, args))

                                                                                                                
                                                                                                        
                                                                                                        
588
def _oauth_request_token_url(
589
    self,
590
    redirect_uri: Optional[str] = None,
#Dor24d3IxT32pnL7UzE1BQbiy7o=
Идентификатор #357
Уязвимый файл
./tornado/auth.py : 586
Входной файл
./tornado/auth.py : 559
OWASP - A01 CWE-601
...\auth.py Точка входа
556
    client_id: Optional[str] = None,
557
    client_secret: Optional[str] = None,
558
    extra_params: Optional[Dict[str, Any]] = None,
559
    
scope
: Optional[str] = None,
560
    response_type: str = "code",
561
) -> None:
562
    """Redirects the user to obtain OAuth authorization for this service.
...\auth.py Точка входа данных
556
    client_id: Optional[str] = None,
557
    client_secret: Optional[str] = None,
558
    extra_params: Optional[Dict[str, Any]] = None,
559
    
scope
: Optional[str] = None,
560
    response_type: str = "code",
561
) -> None:
562
    """Redirects the user to obtain OAuth authorization for this service.
...\auth.py Изменение данных
581
    if extra_params:
582
        args.update(extra_params)
583
    if scope:
584
        args["
scope
"] = " ".join(scope)
585
    url = self._OAUTH_AUTHORIZE_URL  # type: ignore
586
    handler.redirect(url_concat(url, args))
588
def _oauth_request_token_url(
...\auth.py Изменение данных
581
    if extra_params:
582
        args.update(extra_params)
583
    if scope:
584
        args["scope"] = "
 ".join(scope)

                                                                                                                
                                                                                                        
                                                                                                        
585
    url = self._OAUTH_AUTHORIZE_URL  # type: ignore
586
    handler.redirect(url_concat(url, args))
588
def _oauth_request_token_url(
...\auth.py Изменение данных
581
    if extra_params:
582
        args.update(extra_params)
583
    if scope:
584
        
args["scope"]
 = " ".join(scope)
585
    url = self._OAUTH_AUTHORIZE_URL  # type: ignore
586
    handler.redirect(url_concat(url, args))
588
def _oauth_request_token_url(
...\auth.py Изменение данных
583
    if scope:
584
        args["scope"] = " ".join(scope)
585
    url = self._OAUTH_AUTHORIZE_URL  # type: ignore
586
    handler.redirect(url_concat(url, 
args
))
588
def _oauth_request_token_url(
589
    self,
590
    redirect_uri: Optional[str] = None,
...\auth.py Изменение данных
583
    if scope:
584
        args["scope"] = " ".join(scope)
585
    url = self._OAUTH_AUTHORIZE_URL  # type: ignore
586
    handler.redirect(
url_concat(url, args)
)
588
def _oauth_request_token_url(
589
    self,
590
    redirect_uri: Optional[str] = None,
...\auth.py Точка выхода
583
    if scope:
584
        args["scope"] = " ".join(scope)
585
    url = self._OAUTH_AUTHORIZE_URL  # type: ignore
586
    
handler.redirect(url_concat(url, args))

                                                                                                                
                                                                                                        
                                                                                                        
588
def _oauth_request_token_url(
589
    self,
590
    redirect_uri: Optional[str] = None,
#vJ2DZ6sj905+4rxXOMpzZ5v7ik4=
Идентификатор #360
Уязвимый файл
./tornado/auth.py : 586
Входной файл
./tornado/auth.py : 560
OWASP - A01 CWE-601
...\auth.py Точка входа
557
    client_secret: Optional[str] = None,
558
    extra_params: Optional[Dict[str, Any]] = None,
559
    scope: Optional[str] = None,
560
    
response_type
: str = "code",
561
) -> None:
562
    """Redirects the user to obtain OAuth authorization for this service.
564
    Some providers require that you register a redirect URL with
...\auth.py Точка входа данных
557
    client_secret: Optional[str] = None,
558
    extra_params: Optional[Dict[str, Any]] = None,
559
    scope: Optional[str] = None,
560
    
response_type
: str = "code",
561
) -> None:
562
    """Redirects the user to obtain OAuth authorization for this service.
564
    Some providers require that you register a redirect URL with
...\auth.py Изменение данных
573
   this is now an ordinary synchronous function.
574
"""
575
handler = cast(RequestHandler, self)
576
args = {"
response_type
": response_type}
577
if redirect_uri is not None:
578
    args["redirect_uri"] = redirect_uri
579
if client_id is not None:
...\auth.py Изменение данных
573
   this is now an ordinary synchronous function.
574
"""
575
handler = cast(RequestHandler, self)
576
args = {
"response_type"
: response_type}
577
if redirect_uri is not None:
578
    args["redirect_uri"] = redirect_uri
579
if client_id is not None:
...\auth.py Изменение данных
573
   this is now an ordinary synchronous function.
574
"""
575
handler = cast(RequestHandler, self)
576
args = 
{"response_type": response_type}

                                                                                                                
                                                                                                        
                                                                                                        
577
if redirect_uri is not None:
578
    args["redirect_uri"] = redirect_uri
579
if client_id is not None:
...\auth.py Изменение данных
573
   this is now an ordinary synchronous function.
574
"""
575
handler = cast(RequestHandler, self)
576

                                                                                                                
                                                                                                        
                                                                                                            
                                                                                                                
                                                                                                                    
args
 = {"response_type": response_type}
577
if redirect_uri is not None:
578
    args["redirect_uri"] = redirect_uri
579
if client_id is not None:
...\auth.py Изменение данных
575
handler = cast(RequestHandler, self)
576
args = {"response_type": response_type}
577
if redirect_uri is not None:
578
    
args
["redirect_uri"] = redirect_uri
579
if client_id is not None:
580
    args["client_id"] = client_id
581
if extra_params:
...\auth.py Изменение данных
575
handler = cast(RequestHandler, self)
576
args = {"response_type": response_type}
577
if redirect_uri is not None:
578
    
args["redirect_uri"]
 = redirect_uri
579
if client_id is not None:
580
    args["client_id"] = client_id
581
if extra_params:
...\auth.py Изменение данных
583
    if scope:
584
        args["scope"] = " ".join(scope)
585
    url = self._OAUTH_AUTHORIZE_URL  # type: ignore
586
    handler.redirect(url_concat(url, 
args
))
588
def _oauth_request_token_url(
589
    self,
590
    redirect_uri: Optional[str] = None,
...\auth.py Изменение данных
583
    if scope:
584
        args["scope"] = " ".join(scope)
585
    url = self._OAUTH_AUTHORIZE_URL  # type: ignore
586
    handler.redirect(
url_concat(url, args)
)
588
def _oauth_request_token_url(
589
    self,
590
    redirect_uri: Optional[str] = None,
...\auth.py Точка выхода
583
    if scope:
584
        args["scope"] = " ".join(scope)
585
    url = self._OAUTH_AUTHORIZE_URL  # type: ignore
586
    
handler.redirect(url_concat(url, args))

                                                                                                                
                                                                                                        
                                                                                                        
588
def _oauth_request_token_url(
589
    self,
590
    redirect_uri: Optional[str] = None,
Средняя
Открытое перенаправление
Описание уязвимости
Уязвимый код 2492  self.redirect(to_url, permanent=self._permanent)
#2fXoO3Q1wDLzVHzJG8HKkgXtKMY=
Идентификатор #493
Уязвимый файл
./tornado/web.py : 2492
Входной файл
./tornado/web.py : 2484
OWASP - A01 CWE-601
...\web.py Точка входа
2480
def initialize(self, url: str, permanent: bool = True) -> None:
2481
    self._url = url
2482
    self._permanent = permanent
2484
def get(self, *
args
: Any, **kwargs: Any) -> None:
2485
    to_url = self._url.format(*args, **kwargs)
2486
    if self.request.query_arguments:
2487
        # TODO: figure out typing for the next line.
...\web.py Точка входа данных
2480
def initialize(self, url: str, permanent: bool = True) -> None:
2481
    self._url = url
2482
    self._permanent = permanent
2484
def get(self, *
args
: Any, **kwargs: Any) -> None:
2485
    to_url = self._url.format(*args, **kwargs)
2486
    if self.request.query_arguments:
2487
        # TODO: figure out typing for the next line.
...\web.py Изменение данных
2481
    self._url = url
2482
    self._permanent = permanent
2484
def get(self, *args: Any, **kwargs: Any) -> None:
2485
    to_url = self._url.format(*
args
, **kwargs)
2486
    if self.request.query_arguments:
2487
        # TODO: figure out typing for the next line.
2488
        to_url = httputil.url_concat(
...\web.py Изменение данных
2481
    self._url = url
2482
    self._permanent = permanent
2484
def get(self, *args: Any, **kwargs: Any) -> None:
2485
    to_url = self._url.format(
*args
, **kwargs)
2486
    if self.request.query_arguments:
2487
        # TODO: figure out typing for the next line.
2488
        to_url = httputil.url_concat(
...\web.py Изменение данных
2481
    self._url = url
2482
    self._permanent = permanent
2484
def get(self, *args: Any, **kwargs: Any) -> None:
2485
    to_url = 
self._url.format(*args, **kwargs)

                                                                                                                
                                                                                                        
                                                                                                        
2486
    if self.request.query_arguments:
2487
        # TODO: figure out typing for the next line.
2488
        to_url = httputil.url_concat(
...\web.py Изменение данных
2481
    self._url = url
2482
    self._permanent = permanent
2484
def get(self, *args: Any, **kwargs: Any) -> None:
2485
    
to_url
 = self._url.format(*args, **kwargs)
2486
    if self.request.query_arguments:
2487
        # TODO: figure out typing for the next line.
2488
        to_url = httputil.url_concat(
...\web.py Изменение данных
2486
if self.request.query_arguments:
2487
    # TODO: figure out typing for the next line.
2488
    to_url = httputil.url_concat(
2489
        
to_url
,
2490
        list(httputil.qs_to_qsl(self.request.query_arguments)),  # type: ignore
2491
    )
2492
self.redirect(to_url, permanent=self._permanent)
...\web.py Изменение данных
2485
to_url = self._url.format(*args, **kwargs)
2486
if self.request.query_arguments:
2487
    # TODO: figure out typing for the next line.
2488

                                                                                                                
                                                                                                        
                                                                                                            
                                                                                                                
                                                                                                                    
    to_url = httputil.url_concat(

                                                                                                                
                                                                                                        
                                                                                                        
2489
        to_url,
2490
        list(httputil.qs_to_qsl(self.request.query_arguments)),  # type: ignore
2491
    )
...\web.py Изменение данных
2485
to_url = self._url.format(*args, **kwargs)
2486
if self.request.query_arguments:
2487
    # TODO: figure out typing for the next line.
2488
    
to_url
 = httputil.url_concat(
2489
        to_url,
2490
        list(httputil.qs_to_qsl(self.request.query_arguments)),  # type: ignore
2491
    )
...\web.py Изменение данных
2489
                to_url,
2490
                list(httputil.qs_to_qsl(self.request.query_arguments)),  # type: ignore
2491
            )
2492
        self.redirect(
to_url
, permanent=self._permanent)
2495
class StaticFileHandler(RequestHandler):
2496
    """A simple handler that can serve static content from a directory.
2498
    A `StaticFileHandler` is configured automatically if you pass the
...\web.py Точка выхода
2489
                to_url,
2490
                list(httputil.qs_to_qsl(self.request.query_arguments)),  # type: ignore
2491
            )
2492
        
self.redirect(to_url, permanent=self._permanent)

                                                                                                                
                                                                                                        
                                                                                                        
2495
class StaticFileHandler(RequestHandler):
2496
    """A simple handler that can serve static content from a directory.
2498
    A `StaticFileHandler` is configured automatically if you pass the
#pZvy+W0r6YSil/yWCIPj6XGSj/U=
Идентификатор #496
Уязвимый файл
./tornado/web.py : 2492
Входной файл
./tornado/web.py : 2484
OWASP - A01 CWE-601
...\web.py Точка входа
2480
def initialize(self, url: str, permanent: bool = True) -> None:
2481
    self._url = url
2482
    self._permanent = permanent
2484
def get(self, *args: Any, **
kwargs
: Any) -> None:
2485
    to_url = self._url.format(*args, **kwargs)
2486
    if self.request.query_arguments:
2487
        # TODO: figure out typing for the next line.
...\web.py Точка входа данных
2480
def initialize(self, url: str, permanent: bool = True) -> None:
2481
    self._url = url
2482
    self._permanent = permanent
2484
def get(self, *args: Any, **
kwargs
: Any) -> None:
2485
    to_url = self._url.format(*args, **kwargs)
2486
    if self.request.query_arguments:
2487
        # TODO: figure out typing for the next line.
...\web.py Изменение данных
2481
    self._url = url
2482
    self._permanent = permanent
2484
def get(self, *args: Any, **kwargs: Any) -> None:
2485
    to_url = self._url.format(*args, **
kwargs
)
2486
    if self.request.query_arguments:
2487
        # TODO: figure out typing for the next line.
2488
        to_url = httputil.url_concat(
...\web.py Изменение данных
2481
    self._url = url
2482
    self._permanent = permanent
2484
def get(self, *args: Any, **kwargs: Any) -> None:
2485
    to_url = self._url.format(*args, 
**kwargs
)
2486
    if self.request.query_arguments:
2487
        # TODO: figure out typing for the next line.
2488
        to_url = httputil.url_concat(
...\web.py Изменение данных
2481
    self._url = url
2482
    self._permanent = permanent
2484
def get(self, *args: Any, **kwargs: Any) -> None:
2485
    to_url = 
self._url.format(*args, **kwargs)

                                                                                                                
                                                                                                        
                                                                                                        
2486
    if self.request.query_arguments:
2487
        # TODO: figure out typing for the next line.
2488
        to_url = httputil.url_concat(
...\web.py Изменение данных
2481
    self._url = url
2482
    self._permanent = permanent
2484
def get(self, *args: Any, **kwargs: Any) -> None:
2485
    
to_url
 = self._url.format(*args, **kwargs)
2486
    if self.request.query_arguments:
2487
        # TODO: figure out typing for the next line.
2488
        to_url = httputil.url_concat(
...\web.py Изменение данных
2486
if self.request.query_arguments:
2487
    # TODO: figure out typing for the next line.
2488
    to_url = httputil.url_concat(
2489
        
to_url
,
2490
        list(httputil.qs_to_qsl(self.request.query_arguments)),  # type: ignore
2491
    )
2492
self.redirect(to_url, permanent=self._permanent)
...\web.py Изменение данных
2485
to_url = self._url.format(*args, **kwargs)
2486
if self.request.query_arguments:
2487
    # TODO: figure out typing for the next line.
2488

                                                                                                                
                                                                                                        
                                                                                                            
                                                                                                                
                                                                                                                    
    to_url = httputil.url_concat(

                                                                                                                
                                                                                                        
                                                                                                        
2489
        to_url,
2490
        list(httputil.qs_to_qsl(self.request.query_arguments)),  # type: ignore
2491
    )
...\web.py Изменение данных
2485
to_url = self._url.format(*args, **kwargs)
2486
if self.request.query_arguments:
2487
    # TODO: figure out typing for the next line.
2488
    
to_url
 = httputil.url_concat(
2489
        to_url,
2490
        list(httputil.qs_to_qsl(self.request.query_arguments)),  # type: ignore
2491
    )
...\web.py Изменение данных
2489
                to_url,
2490
                list(httputil.qs_to_qsl(self.request.query_arguments)),  # type: ignore
2491
            )
2492
        self.redirect(
to_url
, permanent=self._permanent)
2495
class StaticFileHandler(RequestHandler):
2496
    """A simple handler that can serve static content from a directory.
2498
    A `StaticFileHandler` is configured automatically if you pass the
...\web.py Точка выхода
2489
                to_url,
2490
                list(httputil.qs_to_qsl(self.request.query_arguments)),  # type: ignore
2491
            )
2492
        
self.redirect(to_url, permanent=self._permanent)

                                                                                                                
                                                                                                        
                                                                                                        
2495
class StaticFileHandler(RequestHandler):
2496
    """A simple handler that can serve static content from a directory.
2498
    A `StaticFileHandler` is configured automatically if you pass the
Средняя
Открытое перенаправление
Описание уязвимости
Уязвимый код 92  self.redirect(self.reverse_url("countdown", count - 1))
#224VhqRibdMC3yWII2aiGgWloUA=
Идентификатор #549
Уязвимый файл
./tornado/test/httpclient_test.py : 92
Входной файл
./tornado/test/httpclient_test.py : 89
OWASP - A01 CWE-601
...\httpclient_test.py Точка входа
84
    def get(self):
85
        self.finish(self.request.headers["Authorization"])
88
class CountdownHandler(RequestHandler):
89
    def get(self, 
count
):
90
        count = int(count)
91
        if count > 0:
92
            self.redirect(self.reverse_url("countdown", count - 1))
...\httpclient_test.py Точка входа данных
84
    def get(self):
85
        self.finish(self.request.headers["Authorization"])
88
class CountdownHandler(RequestHandler):
89
    def get(self, 
count
):
90
        count = int(count)
91
        if count > 0:
92
            self.redirect(self.reverse_url("countdown", count - 1))
...\httpclient_test.py Изменение данных
85
        self.finish(self.request.headers["Authorization"])
88
class CountdownHandler(RequestHandler):
89
    def get(self, count):
90
        
count
 = int(count)
91
        if count > 0:
92
            self.redirect(self.reverse_url("countdown", count - 1))
93
        else:
...\httpclient_test.py Изменение данных
85
        self.finish(self.request.headers["Authorization"])
88
class CountdownHandler(RequestHandler):
89
    def get(self, count):
90
        count = 
int(count)

                                                                                                                
                                                                                                        
                                                                                                        
91
        if count > 0:
92
            self.redirect(self.reverse_url("countdown", count - 1))
93
        else:
...\httpclient_test.py Изменение данных
85
        self.finish(self.request.headers["Authorization"])
88
class CountdownHandler(RequestHandler):
89
    def get(self, count):
90
        
count
 = int(count)
91
        if count > 0:
92
            self.redirect(self.reverse_url("countdown", count - 1))
93
        else:
...\httpclient_test.py Изменение данных
89
    def get(self, count):
90
        count = int(count)
91
        if count > 0:
92
            self.redirect(self.reverse_url("
count
down", count - 1))
93
        else:
94
            self.write("Zero")
97
class EchoPostHandler(RequestHandler):
...\httpclient_test.py Изменение данных
89
    def get(self, count):
90
        count = int(count)
91
        if count > 0:
92
...      self.redirect(self.reverse_url("countdown", 
count - 1
))
93
        else:
94
            self.write("Zero")
97
class EchoPostHandler(RequestHandler):
...\httpclient_test.py Изменение данных
89
    def get(self, count):
90
        count = int(count)
91
        if count > 0:
92
            self.redirect(
self.reverse_url("countdown", count - 1)
)
93
        else:
94
            self.write("Zero")
97
class EchoPostHandler(RequestHandler):
...\httpclient_test.py Точка выхода
89
    def get(self, count):
90
        count = int(count)
91
        if count > 0:
92
            
self.redirect(self.reverse_url("countdown", count - 1))

                                                                                                                
                                                                                                        
                                                                                                        
93
        else:
94
            self.write("Zero")
97
class EchoPostHandler(RequestHandler):
Средняя
Открытое перенаправление
Описание уязвимости
Уязвимый код 652  self.redirect("/", permanent=int(self.get_argument("permanent")))
#R4Xm5WuX1F8FZGsABFiUulV18LI=
Идентификатор #643
Уязвимый файл
./tornado/test/web_test.py : 652
Входной файл
./tornado/test/web_test.py : 109
OWASP - A01 CWE-601
...\web_test.py Точка входа
105
        self.application = ObjectDict(
106
            settings=dict(cookie_secret=cookie_secret, key_version=key_version)
107
        )
109
def get_cookie(self, 
name
):
110
    return self._cookies.get(name)
112
def set_cookie(self, name, value, expires_days=None):
113
    self._cookies[name] = value
...\web_test.py Точка входа данных
105
        self.application = ObjectDict(
106
            settings=dict(cookie_secret=cookie_secret, key_version=key_version)
107
        )
109
def get_cookie(self, 
name
):
110
    return self._cookies.get(name)
112
def set_cookie(self, name, value, expires_days=None):
113
    self._cookies[name] = value
...\web_test.py Изменение данных
106
                settings=dict(cookie_secret=cookie_secret, key_version=key_version)
107
            )
109
    def get_cookie(self, name):
110
        return self._cookies.get(
name
)
112
    def set_cookie(self, name, value, expires_days=None):
113
        self._cookies[name] = value
116
# See SignedValueTest below for more.
...\web_test.py Изменение данных
645
        self.add_header("x-multi", 3)
646
        self.add_header("X-Multi", "4")
649
class RedirectHandler(RequestHandler):
650
    def get(
self
):
651
        if self.get_argument("permanent", None) is not None:
652
            self.redirect("/", permanent=int(self.get_argument("permanent")))
653
        elif self.get_argument("status", None) is not None:
...\web_test.py Изменение данных
649
class RedirectHandler(RequestHandler):
650
    def get(self):
651
        if self.get_argument("permanent", None) is not None:
652
            self.redirect("/", permanent=int(
self.get_argument
("permanent")))
653
        elif self.get_argument("status", None) is not None:
654
            self.redirect("/", status=int(self.get_argument("status")))
655
        else:
...\web_test.py Изменение данных
649
class RedirectHandler(RequestHandler):
650
    def get(self):
651
        if self.get_argument("permanent", None) is not None:
652
            self.redirect("/", permanent=int(
self.get_argument("permanent")
))
653
        elif self.get_argument("status", None) is not None:
654
            self.redirect("/", status=int(self.get_argument("status")))
655
        else:
...\web_test.py Изменение данных
649
class RedirectHandler(RequestHandler):
650
    def get(self):
651
        if self.get_argument("permanent", None) is not None:
652
            self.redirect("/", permanent=
int(self.get_argument("permanent"))
)
653
        elif self.get_argument("status", None) is not None:
654
            self.redirect("/", status=int(self.get_argument("status")))
655
        else:
...\web_test.py Точка выхода
649
class RedirectHandler(RequestHandler):
650
    def get(self):
651
        if self.get_argument("permanent", None) is not None:
652
            
self.redirect("/", permanent=int(self.get_argument("permanent")))

                                                                                                                
                                                                                                        
                                                                                                        
653
        elif self.get_argument("status", None) is not None:
654
            self.redirect("/", status=int(self.get_argument("status")))
655
        else:
Средняя
Открытое перенаправление
Описание уязвимости
Уязвимый код 654  self.redirect("/", status=int(self.get_argument("status")))
#3g2WOsIrKQZYLstISh5HljL+yb8=
Идентификатор #645
Уязвимый файл
./tornado/test/web_test.py : 654
Входной файл
./tornado/test/web_test.py : 109
OWASP - A01 CWE-601
...\web_test.py Точка входа
105
        self.application = ObjectDict(
106
            settings=dict(cookie_secret=cookie_secret, key_version=key_version)
107
        )
109
def get_cookie(self, 
name
):
110
    return self._cookies.get(name)
112
def set_cookie(self, name, value, expires_days=None):
113
    self._cookies[name] = value
...\web_test.py Точка входа данных
105
        self.application = ObjectDict(
106
            settings=dict(cookie_secret=cookie_secret, key_version=key_version)
107
        )
109
def get_cookie(self, 
name
):
110
    return self._cookies.get(name)
112
def set_cookie(self, name, value, expires_days=None):
113
    self._cookies[name] = value
...\web_test.py Изменение данных
106
                settings=dict(cookie_secret=cookie_secret, key_version=key_version)
107
            )
109
    def get_cookie(self, name):
110
        return self._cookies.get(
name
)
112
    def set_cookie(self, name, value, expires_days=None):
113
        self._cookies[name] = value
116
# See SignedValueTest below for more.
...\web_test.py Изменение данных
645
        self.add_header("x-multi", 3)
646
        self.add_header("X-Multi", "4")
649
class RedirectHandler(RequestHandler):
650
    def get(
self
):
651
        if self.get_argument("permanent", None) is not None:
652
            self.redirect("/", permanent=int(self.get_argument("permanent")))
653
        elif self.get_argument("status", None) is not None:
...\web_test.py Изменение данных
651
        if self.get_argument("permanent", None) is not None:
652
            self.redirect("/", permanent=int(self.get_argument("permanent")))
653
        elif self.get_argument("status", None) is not None:
654
            self.redirect("/", status=int(
self.get_argument
("status")))
655
        else:
656
            raise Exception("didn't get permanent or status arguments")
659
class EmptyFlushCallbackHandler(RequestHandler):
...\web_test.py Изменение данных
651
        if self.get_argument("permanent", None) is not None:
652
            self.redirect("/", permanent=int(self.get_argument("permanent")))
653
        elif self.get_argument("status", None) is not None:
654
            self.redirect("/", status=int(
self.get_argument("status")
))
655
        else:
656
            raise Exception("didn't get permanent or status arguments")
659
class EmptyFlushCallbackHandler(RequestHandler):
...\web_test.py Изменение данных
651
        if self.get_argument("permanent", None) is not None:
652
            self.redirect("/", permanent=int(self.get_argument("permanent")))
653
        elif self.get_argument("status", None) is not None:
654
            self.redirect("/", status=
int(self.get_argument("status"))
)
655
        else:
656
            raise Exception("didn't get permanent or status arguments")
659
class EmptyFlushCallbackHandler(RequestHandler):
...\web_test.py Точка выхода
651
        if self.get_argument("permanent", None) is not None:
652
            self.redirect("/", permanent=int(self.get_argument("permanent")))
653
        elif self.get_argument("status", None) is not None:
654
            
self.redirect("/", status=int(self.get_argument("status")))

                                                                                                                
                                                                                                        
                                                                                                        
655
        else:
656
            raise Exception("didn't get permanent or status arguments")
659
class EmptyFlushCallbackHandler(RequestHandler):
Средняя
Открытое перенаправление
Описание уязвимости
Уязвимый код 22  self.redirect(path, status=int(self.get_argument('status', '302')))
#c7+GMUaB0siM+ZaSIEFWOsDC/Y4=
Идентификатор #659
Уязвимый файл
./maint/test/redbot/red_test.py : 22
Входной файл
./maint/test/redbot/red_test.py : 21
OWASP - A01 CWE-601
...\red_test.py Точка входа
16
    def get(self):
17
        self.write("Hello world")
20
class RedirectHandler(RequestHandler):
21
    def get(self, 
path
):
22
        self.redirect(path, status=int(self.get_argument('status', '302')))
25
class PostHandler(RequestHandler):
26
    def post(self):
...\red_test.py Точка входа данных
16
    def get(self):
17
        self.write("Hello world")
20
class RedirectHandler(RequestHandler):
21
    def get(self, 
path
):
22
        self.redirect(path, status=int(self.get_argument('status', '302')))
25
class PostHandler(RequestHandler):
26
    def post(self):
...\red_test.py Изменение данных
17
        self.write("Hello world")
20
class RedirectHandler(RequestHandler):
21
    def get(self, path):
22
        self.redirect(
path
, status=int(self.get_argument('status', '302')))
25
class PostHandler(RequestHandler):
26
    def post(self):
27
        assert self.get_argument('foo') == 'bar'
...\red_test.py Точка выхода
17
        self.write("Hello world")
20
class RedirectHandler(RequestHandler):
21
    def get(self, path):
22
        
self.redirect(path, status=int(self.get_argument('status', '302')))

                                                                                                                
                                                                                                        
                                                                                                        
25
class PostHandler(RequestHandler):
26
    def post(self):
27
        assert self.get_argument('foo') == 'bar'
Средняя
Подделка записи файла журнала
Описание уязвимости
Уязвимый код 60  console.log("ERROR:", response)
#491Fe5iBmFkxiQoM2re/Kl6WQH0=
Идентификатор #641
Уязвимый файл
./demos/chat/static/chat.js : 60
Входной файл
./demos/chat/static/chat.js : 59
OWASP - A09 CWE-117
...\chat.js Точка входа
56
    $.ajax({url: url, data: $.param(args), dataType: "text", type: "POST",
57
            success: function(response) {
58
        if (callback) callback(eval("(" + response + ")"));
59
    }, error: function(
response
) {
60
        console.log("ERROR:", response);
61
    }});
62
};
...\chat.js Точка входа данных
56
    $.ajax({url: url, data: $.param(args), dataType: "text", type: "POST",
57
            success: function(response) {
58
        if (callback) callback(eval("(" + response + ")"));
59
    }, error: function(
response
) {
60
        console.log("ERROR:", response);
61
    }});
62
};
...\chat.js Изменение данных
57
            success: function(response) {
58
        if (callback) callback(eval("(" + response + ")"));
59
    }, error: function(response) {
60
        console.log("ERROR:", 
response
);
61
    }});
62
};
64
jQuery.fn.formToDict = function() {
...\chat.js Точка выхода
57
            success: function(response) {
58
        if (callback) callback(eval("(" + response + ")"));
59
    }, error: function(response) {
60
        
console.log("ERROR:", response)
;
61
    }});
62
};
64
jQuery.fn.formToDict = function() {
Средняя
Подделка записи файла журнала
Описание уязвимости
Уязвимый код 121  console.log(messages.length, "new messages, cursor:", updater.cursor)
#9nJZ4OANwrXWBLty/OYLVAWwdU8=
Идентификатор #642
Уязвимый файл
./demos/chat/static/chat.js : 121
Входной файл
./demos/chat/static/chat.js : 100
OWASP - A09 CWE-117
...\chat.js Точка входа
96
            data: $.param(args), success: updater.onSuccess,
97
            error: updater.onError});
98
},
100
onSuccess: function(
response
) {
101
    try {
102
        updater.newMessages(eval("(" + response + ")"));
103
    } catch (e) {
...\chat.js Точка входа данных
96
            data: $.param(args), success: updater.onSuccess,
97
            error: updater.onError});
98
},
100
onSuccess: function(
response
) {
101
    try {
102
        updater.newMessages(eval("(" + response + ")"));
103
    } catch (e) {
...\chat.js Изменение данных
98
},
100
onSuccess: function(response) {
101
    try {
102
        updater.newMessages(eval("(" + 
response
 + ")"));
103
    } catch (e) {
104
        updater.onError();
105
        return;
...\chat.js Изменение данных
98
},
100
onSuccess: function(response) {
101
    try {
102
        updater.newMessages(eval(
"(" + response + ")"
));
103
    } catch (e) {
104
        updater.onError();
105
        return;
...\chat.js Изменение данных
98
},
100
onSuccess: function(response) {
101
    try {
102
        updater.newMessages(
eval("(" + response + ")")
);
103
    } catch (e) {
104
        updater.onError();
105
        return;
...\chat.js Изменение данных
113
    console.log("Poll error; sleeping for", updater.errorSleepTime, "ms");
114
    window.setTimeout(updater.poll, updater.errorSleepTime);
115
},
117
newMessages: function(
response
) {
118
    if (!response.messages) return;
119
    var messages = response.messages;
120
    updater.cursor = messages[messages.length - 1].id;
...\chat.js Изменение данных
115
},
117
newMessages: function(response) {
118
    if (!response.messages) return;
119
    var messages = 
response.messages
;
120
    updater.cursor = messages[messages.length - 1].id;
121
    console.log(messages.length, "new messages, cursor:", updater.cursor);
122
    for (var i = 0; i < messages.length; i++) {
...\chat.js Изменение данных
115
},
117
newMessages: function(response) {
118
    if (!response.messages) return;
119
    var 
messages
 = response.messages;
120
    updater.cursor = messages[messages.length - 1].id;
121
    console.log(messages.length, "new messages, cursor:", updater.cursor);
122
    for (var i = 0; i < messages.length; i++) {
...\chat.js Изменение данных
117
newMessages: function(response) {
118
    if (!response.messages) return;
119
    var messages = response.messages;
120
    updater.cursor = 
messages[messages.length - 1].id
;
121
    console.log(messages.length, "new messages, cursor:", updater.cursor);
122
    for (var i = 0; i < messages.length; i++) {
123
        updater.showMessage(messages[i]);
...\chat.js Изменение данных
117
newMessages: function(response) {
118
    if (!response.messages) return;
119
    var messages = response.messages;
120
    
updater.cursor
 = messages[messages.length - 1].id;
121
    console.log(messages.length, "new messages, cursor:", updater.cursor);
122
    for (var i = 0; i < messages.length; i++) {
123
        updater.showMessage(messages[i]);
...\chat.js Изменение данных
118
if (!response.messages) return;
119
var messages = response.messages;
120
updater.cursor = messages[messages.length - 1].id;
121
...ole.log(messages.length, "new messages, cursor:", 
updater.cursor
);
122
for (var i = 0; i < messages.length; i++) {
123
    updater.showMessage(messages[i]);
124
}
...\chat.js Точка выхода
118
if (!response.messages) return;
119
var messages = response.messages;
120
updater.cursor = messages[messages.length - 1].id;
121

                                                                                                                
                                                                                                        
                                                                                                            
                                                                                                                
                                                                                                                    
console.log(messages.length, "new messages, cursor:", updater.cursor)
;
122
for (var i = 0; i < messages.length; i++) {
123
    updater.showMessage(messages[i]);
124
}
#BYvv89vwk1yr9cnFIRVpVxV4Yqg=
Идентификатор #644
Уязвимый файл
./demos/chat/static/chat.js : 121
Входной файл
./demos/chat/static/chat.js : 100
OWASP - A09 CWE-117
...\chat.js Точка входа
96
            data: $.param(args), success: updater.onSuccess,
97
            error: updater.onError});
98
},
100
onSuccess: function(
response
) {
101
    try {
102
        updater.newMessages(eval("(" + response + ")"));
103
    } catch (e) {
...\chat.js Точка входа данных
96
            data: $.param(args), success: updater.onSuccess,
97
            error: updater.onError});
98
},
100
onSuccess: function(
response
) {
101
    try {
102
        updater.newMessages(eval("(" + response + ")"));
103
    } catch (e) {
...\chat.js Изменение данных
98
},
100
onSuccess: function(response) {
101
    try {
102
        updater.newMessages(eval("(" + 
response
 + ")"));
103
    } catch (e) {
104
        updater.onError();
105
        return;
...\chat.js Изменение данных
98
},
100
onSuccess: function(response) {
101
    try {
102
        updater.newMessages(eval(
"(" + response + ")"
));
103
    } catch (e) {
104
        updater.onError();
105
        return;
...\chat.js Изменение данных
98
},
100
onSuccess: function(response) {
101
    try {
102
        updater.newMessages(
eval("(" + response + ")")
);
103
    } catch (e) {
104
        updater.onError();
105
        return;
...\chat.js Изменение данных
113
    console.log("Poll error; sleeping for", updater.errorSleepTime, "ms");
114
    window.setTimeout(updater.poll, updater.errorSleepTime);
115
},
117
newMessages: function(
response
) {
118
    if (!response.messages) return;
119
    var messages = response.messages;
120
    updater.cursor = messages[messages.length - 1].id;
...\chat.js Изменение данных
115
},
117
newMessages: function(response) {
118
    if (!response.messages) return;
119
    var messages = 
response.messages
;
120
    updater.cursor = messages[messages.length - 1].id;
121
    console.log(messages.length, "new messages, cursor:", updater.cursor);
122
    for (var i = 0; i < messages.length; i++) {
...\chat.js Изменение данных
115
},
117
newMessages: function(response) {
118
    if (!response.messages) return;
119
    var 
messages
 = response.messages;
120
    updater.cursor = messages[messages.length - 1].id;
121
    console.log(messages.length, "new messages, cursor:", updater.cursor);
122
    for (var i = 0; i < messages.length; i++) {
...\chat.js Изменение данных
118
if (!response.messages) return;
119
var messages = response.messages;
120
updater.cursor = messages[messages.length - 1].id;
121
console.log(
messages.length
, "new messages, cursor:", updater.cursor);
122
for (var i = 0; i < messages.length; i++) {
123
    updater.showMessage(messages[i]);
124
}
...\chat.js Точка выхода
118
if (!response.messages) return;
119
var messages = response.messages;
120
updater.cursor = messages[messages.length - 1].id;
121

                                                                                                                
                                                                                                        
                                                                                                            
                                                                                                                
                                                                                                                    
console.log(messages.length, "new messages, cursor:", updater.cursor)
;
122
for (var i = 0; i < messages.length; i++) {
123
    updater.showMessage(messages[i]);
124
}
#3vrHspocUTroVQc8e4lfZ7hz24U=
Идентификатор #646
Уязвимый файл
./demos/chat/static/chat.js : 121
Входной файл
./demos/chat/static/chat.js : 117
OWASP - A09 CWE-117
...\chat.js Точка входа
113
    console.log("Poll error; sleeping for", updater.errorSleepTime, "ms");
114
    window.setTimeout(updater.poll, updater.errorSleepTime);
115
},
117
newMessages: function(
response
) {
118
    if (!response.messages) return;
119
    var messages = response.messages;
120
    updater.cursor = messages[messages.length - 1].id;
...\chat.js Точка входа данных
113
    console.log("Poll error; sleeping for", updater.errorSleepTime, "ms");
114
    window.setTimeout(updater.poll, updater.errorSleepTime);
115
},
117
newMessages: function(
response
) {
118
    if (!response.messages) return;
119
    var messages = response.messages;
120
    updater.cursor = messages[messages.length - 1].id;
...\chat.js Изменение данных
115
},
117
newMessages: function(response) {
118
    if (!response.messages) return;
119
    var messages = 
response.messages
;
120
    updater.cursor = messages[messages.length - 1].id;
121
    console.log(messages.length, "new messages, cursor:", updater.cursor);
122
    for (var i = 0; i < messages.length; i++) {
...\chat.js Изменение данных
115
},
117
newMessages: function(response) {
118
    if (!response.messages) return;
119
    var 
messages
 = response.messages;
120
    updater.cursor = messages[messages.length - 1].id;
121
    console.log(messages.length, "new messages, cursor:", updater.cursor);
122
    for (var i = 0; i < messages.length; i++) {
...\chat.js Изменение данных
117
newMessages: function(response) {
118
    if (!response.messages) return;
119
    var messages = response.messages;
120
    updater.cursor = 
messages[messages.length - 1].id
;
121
    console.log(messages.length, "new messages, cursor:", updater.cursor);
122
    for (var i = 0; i < messages.length; i++) {
123
        updater.showMessage(messages[i]);
...\chat.js Изменение данных
117
newMessages: function(response) {
118
    if (!response.messages) return;
119
    var messages = response.messages;
120
    
updater.cursor
 = messages[messages.length - 1].id;
121
    console.log(messages.length, "new messages, cursor:", updater.cursor);
122
    for (var i = 0; i < messages.length; i++) {
123
        updater.showMessage(messages[i]);
...\chat.js Изменение данных
118
if (!response.messages) return;
119
var messages = response.messages;
120
updater.cursor = messages[messages.length - 1].id;
121
...ole.log(messages.length, "new messages, cursor:", 
updater.cursor
);
122
for (var i = 0; i < messages.length; i++) {
123
    updater.showMessage(messages[i]);
124
}
...\chat.js Точка выхода
118
if (!response.messages) return;
119
var messages = response.messages;
120
updater.cursor = messages[messages.length - 1].id;
121

                                                                                                                
                                                                                                        
                                                                                                            
                                                                                                                
                                                                                                                    
console.log(messages.length, "new messages, cursor:", updater.cursor)
;
122
for (var i = 0; i < messages.length; i++) {
123
    updater.showMessage(messages[i]);
124
}
#lfgaN8xZAEWnsvlcWl71DERrunU=
Идентификатор #648
Уязвимый файл
./demos/chat/static/chat.js : 121
Входной файл
./demos/chat/static/chat.js : 117
OWASP - A09 CWE-117
...\chat.js Точка входа
113
    console.log("Poll error; sleeping for", updater.errorSleepTime, "ms");
114
    window.setTimeout(updater.poll, updater.errorSleepTime);
115
},
117
newMessages: function(
response
) {
118
    if (!response.messages) return;
119
    var messages = response.messages;
120
    updater.cursor = messages[messages.length - 1].id;
...\chat.js Точка входа данных
113
    console.log("Poll error; sleeping for", updater.errorSleepTime, "ms");
114
    window.setTimeout(updater.poll, updater.errorSleepTime);
115
},
117
newMessages: function(
response
) {
118
    if (!response.messages) return;
119
    var messages = response.messages;
120
    updater.cursor = messages[messages.length - 1].id;
...\chat.js Изменение данных
115
},
117
newMessages: function(response) {
118
    if (!response.messages) return;
119
    var messages = 
response.messages
;
120
    updater.cursor = messages[messages.length - 1].id;
121
    console.log(messages.length, "new messages, cursor:", updater.cursor);
122
    for (var i = 0; i < messages.length; i++) {
...\chat.js Изменение данных
115
},
117
newMessages: function(response) {
118
    if (!response.messages) return;
119
    var 
messages
 = response.messages;
120
    updater.cursor = messages[messages.length - 1].id;
121
    console.log(messages.length, "new messages, cursor:", updater.cursor);
122
    for (var i = 0; i < messages.length; i++) {
...\chat.js Изменение данных
118
if (!response.messages) return;
119
var messages = response.messages;
120
updater.cursor = messages[messages.length - 1].id;
121
console.log(
messages.length
, "new messages, cursor:", updater.cursor);
122
for (var i = 0; i < messages.length; i++) {
123
    updater.showMessage(messages[i]);
124
}
...\chat.js Точка выхода
118
if (!response.messages) return;
119
var messages = response.messages;
120
updater.cursor = messages[messages.length - 1].id;
121

                                                                                                                
                                                                                                        
                                                                                                            
                                                                                                                
                                                                                                                    
console.log(messages.length, "new messages, cursor:", updater.cursor)
;
122
for (var i = 0; i < messages.length; i++) {
123
    updater.showMessage(messages[i]);
124
}
Потенциальная
JQuery добавление HTML кода в DOM
Описание уязвимости
Уязвимый код 128  $("#m" + message.id)
#/lXGDUuaFj9VNmwAACtCep0r7kI=
Идентификатор #619
Уязвимый файл
./demos/chat/static/chat.js : 128
Входной файл
./demos/chat/static/chat.js : 100
OWASP - A03 CWE-79
...\chat.js Точка входа
96
            data: $.param(args), success: updater.onSuccess,
97
            error: updater.onError});
98
},
100
onSuccess: function(
response
) {
101
    try {
102
        updater.newMessages(eval("(" + response + ")"));
103
    } catch (e) {
...\chat.js Точка входа данных
96
            data: $.param(args), success: updater.onSuccess,
97
            error: updater.onError});
98
},
100
onSuccess: function(
response
) {
101
    try {
102
        updater.newMessages(eval("(" + response + ")"));
103
    } catch (e) {
...\chat.js Изменение данных
98
},
100
onSuccess: function(response) {
101
    try {
102
        updater.newMessages(eval("(" + 
response
 + ")"));
103
    } catch (e) {
104
        updater.onError();
105
        return;
...\chat.js Изменение данных
98
},
100
onSuccess: function(response) {
101
    try {
102
        updater.newMessages(eval(
"(" + response + ")"
));
103
    } catch (e) {
104
        updater.onError();
105
        return;
...\chat.js Изменение данных
98
},
100
onSuccess: function(response) {
101
    try {
102
        updater.newMessages(
eval("(" + response + ")")
);
103
    } catch (e) {
104
        updater.onError();
105
        return;
...\chat.js Изменение данных
113
    console.log("Poll error; sleeping for", updater.errorSleepTime, "ms");
114
    window.setTimeout(updater.poll, updater.errorSleepTime);
115
},
117
newMessages: function(
response
) {
118
    if (!response.messages) return;
119
    var messages = response.messages;
120
    updater.cursor = messages[messages.length - 1].id;
...\chat.js Изменение данных
115
},
117
newMessages: function(response) {
118
    if (!response.messages) return;
119
    var messages = 
response.messages
;
120
    updater.cursor = messages[messages.length - 1].id;
121
    console.log(messages.length, "new messages, cursor:", updater.cursor);
122
    for (var i = 0; i < messages.length; i++) {
...\chat.js Изменение данных
115
},
117
newMessages: function(response) {
118
    if (!response.messages) return;
119
    var 
messages
 = response.messages;
120
    updater.cursor = messages[messages.length - 1].id;
121
    console.log(messages.length, "new messages, cursor:", updater.cursor);
122
    for (var i = 0; i < messages.length; i++) {
...\chat.js Изменение данных
120
    updater.cursor = messages[messages.length - 1].id;
121
    console.log(messages.length, "new messages, cursor:", updater.cursor);
122
    for (var i = 0; i < messages.length; i++) {
123
        updater.showMessage(
messages[i]
);
124
    }
125
},
127
showMessage: function(message) {
...\chat.js Изменение данных
123
        updater.showMessage(messages[i]);
124
    }
125
},
127
showMessage: function(
message
) {
128
    var existing = $("#m" + message.id);
129
    if (existing.length > 0) return;
130
    var node = $(message.html);
...\chat.js Изменение данных
124
    }
125
},
127
showMessage: function(message) {
128
    var existing = $("#m" + 
message.id
);
129
    if (existing.length > 0) return;
130
    var node = $(message.html);
131
    node.hide();
...\chat.js Изменение данных
124
    }
125
},
127
showMessage: function(message) {
128
    var existing = $(
"#m" + message.id
);
129
    if (existing.length > 0) return;
130
    var node = $(message.html);
131
    node.hide();
...\chat.js Точка выхода
124
    }
125
},
127
showMessage: function(message) {
128
    var existing = 
$("#m" + message.id)
;
129
    if (existing.length > 0) return;
130
    var node = $(message.html);
131
    node.hide();
#tWR/52BVamXTpTafmV2schEt0m0=
Идентификатор #624
Уязвимый файл
./demos/chat/static/chat.js : 128
Входной файл
./demos/chat/static/chat.js : 117
OWASP - A03 CWE-79
...\chat.js Точка входа
113
    console.log("Poll error; sleeping for", updater.errorSleepTime, "ms");
114
    window.setTimeout(updater.poll, updater.errorSleepTime);
115
},
117
newMessages: function(
response
) {
118
    if (!response.messages) return;
119
    var messages = response.messages;
120
    updater.cursor = messages[messages.length - 1].id;
...\chat.js Точка входа данных
113
    console.log("Poll error; sleeping for", updater.errorSleepTime, "ms");
114
    window.setTimeout(updater.poll, updater.errorSleepTime);
115
},
117
newMessages: function(
response
) {
118
    if (!response.messages) return;
119
    var messages = response.messages;
120
    updater.cursor = messages[messages.length - 1].id;
...\chat.js Изменение данных
115
},
117
newMessages: function(response) {
118
    if (!response.messages) return;
119
    var messages = 
response.messages
;
120
    updater.cursor = messages[messages.length - 1].id;
121
    console.log(messages.length, "new messages, cursor:", updater.cursor);
122
    for (var i = 0; i < messages.length; i++) {
...\chat.js Изменение данных
115
},
117
newMessages: function(response) {
118
    if (!response.messages) return;
119
    var 
messages
 = response.messages;
120
    updater.cursor = messages[messages.length - 1].id;
121
    console.log(messages.length, "new messages, cursor:", updater.cursor);
122
    for (var i = 0; i < messages.length; i++) {
...\chat.js Изменение данных
120
    updater.cursor = messages[messages.length - 1].id;
121
    console.log(messages.length, "new messages, cursor:", updater.cursor);
122
    for (var i = 0; i < messages.length; i++) {
123
        updater.showMessage(
messages[i]
);
124
    }
125
},
127
showMessage: function(message) {
...\chat.js Изменение данных
123
        updater.showMessage(messages[i]);
124
    }
125
},
127
showMessage: function(
message
) {
128
    var existing = $("#m" + message.id);
129
    if (existing.length > 0) return;
130
    var node = $(message.html);
...\chat.js Изменение данных
124
    }
125
},
127
showMessage: function(message) {
128
    var existing = $("#m" + 
message.id
);
129
    if (existing.length > 0) return;
130
    var node = $(message.html);
131
    node.hide();
...\chat.js Изменение данных
124
    }
125
},
127
showMessage: function(message) {
128
    var existing = $(
"#m" + message.id
);
129
    if (existing.length > 0) return;
130
    var node = $(message.html);
131
    node.hide();
...\chat.js Точка выхода
124
    }
125
},
127
showMessage: function(message) {
128
    var existing = 
$("#m" + message.id)
;
129
    if (existing.length > 0) return;
130
    var node = $(message.html);
131
    node.hide();
#yymauX3MV4f5KcJpMUjmLHSysMw=
Идентификатор #628
Уязвимый файл
./demos/chat/static/chat.js : 128
Входной файл
./demos/chat/static/chat.js : 127
OWASP - A03 CWE-79
...\chat.js Точка входа
123
        updater.showMessage(messages[i]);
124
    }
125
},
127
showMessage: function(
message
) {
128
    var existing = $("#m" + message.id);
129
    if (existing.length > 0) return;
130
    var node = $(message.html);
...\chat.js Точка входа данных
123
        updater.showMessage(messages[i]);
124
    }
125
},
127
showMessage: function(
message
) {
128
    var existing = $("#m" + message.id);
129
    if (existing.length > 0) return;
130
    var node = $(message.html);
...\chat.js Изменение данных
124
    }
125
},
127
showMessage: function(message) {
128
    var existing = $("#m" + 
message.id
);
129
    if (existing.length > 0) return;
130
    var node = $(message.html);
131
    node.hide();
...\chat.js Изменение данных
124
    }
125
},
127
showMessage: function(message) {
128
    var existing = $(
"#m" + message.id
);
129
    if (existing.length > 0) return;
130
    var node = $(message.html);
131
    node.hide();
...\chat.js Точка выхода
124
    }
125
},
127
showMessage: function(message) {
128
    var existing = 
$("#m" + message.id)
;
129
    if (existing.length > 0) return;
130
    var node = $(message.html);
131
    node.hide();
Потенциальная
JQuery добавление HTML кода в DOM
Описание уязвимости
Уязвимый код 130  $(message.html)
#PtEOWx3MGkF3gVvPNHeaiRTC6wE=
Идентификатор #622
Уязвимый файл
./demos/chat/static/chat.js : 130
Входной файл
./demos/chat/static/chat.js : 100
OWASP - A03 CWE-79
...\chat.js Точка входа
96
            data: $.param(args), success: updater.onSuccess,
97
            error: updater.onError});
98
},
100
onSuccess: function(
response
) {
101
    try {
102
        updater.newMessages(eval("(" + response + ")"));
103
    } catch (e) {
...\chat.js Точка входа данных
96
            data: $.param(args), success: updater.onSuccess,
97
            error: updater.onError});
98
},
100
onSuccess: function(
response
) {
101
    try {
102
        updater.newMessages(eval("(" + response + ")"));
103
    } catch (e) {
...\chat.js Изменение данных
98
},
100
onSuccess: function(response) {
101
    try {
102
        updater.newMessages(eval("(" + 
response
 + ")"));
103
    } catch (e) {
104
        updater.onError();
105
        return;
...\chat.js Изменение данных
98
},
100
onSuccess: function(response) {
101
    try {
102
        updater.newMessages(eval(
"(" + response + ")"
));
103
    } catch (e) {
104
        updater.onError();
105
        return;
...\chat.js Изменение данных
98
},
100
onSuccess: function(response) {
101
    try {
102
        updater.newMessages(
eval("(" + response + ")")
);
103
    } catch (e) {
104
        updater.onError();
105
        return;
...\chat.js Изменение данных
113
    console.log("Poll error; sleeping for", updater.errorSleepTime, "ms");
114
    window.setTimeout(updater.poll, updater.errorSleepTime);
115
},
117
newMessages: function(
response
) {
118
    if (!response.messages) return;
119
    var messages = response.messages;
120
    updater.cursor = messages[messages.length - 1].id;
...\chat.js Изменение данных
115
},
117
newMessages: function(response) {
118
    if (!response.messages) return;
119
    var messages = 
response.messages
;
120
    updater.cursor = messages[messages.length - 1].id;
121
    console.log(messages.length, "new messages, cursor:", updater.cursor);
122
    for (var i = 0; i < messages.length; i++) {
...\chat.js Изменение данных
115
},
117
newMessages: function(response) {
118
    if (!response.messages) return;
119
    var 
messages
 = response.messages;
120
    updater.cursor = messages[messages.length - 1].id;
121
    console.log(messages.length, "new messages, cursor:", updater.cursor);
122
    for (var i = 0; i < messages.length; i++) {
...\chat.js Изменение данных
120
    updater.cursor = messages[messages.length - 1].id;
121
    console.log(messages.length, "new messages, cursor:", updater.cursor);
122
    for (var i = 0; i < messages.length; i++) {
123
        updater.showMessage(
messages[i]
);
124
    }
125
},
127
showMessage: function(message) {
...\chat.js Изменение данных
123
        updater.showMessage(messages[i]);
124
    }
125
},
127
showMessage: function(
message
) {
128
    var existing = $("#m" + message.id);
129
    if (existing.length > 0) return;
130
    var node = $(message.html);
...\chat.js Изменение данных
127
showMessage: function(message) {
128
    var existing = $("#m" + message.id);
129
    if (existing.length > 0) return;
130
    var node = $(
message.html
);
131
    node.hide();
132
    $("#inbox").append(node);
133
    node.slideDown();
...\chat.js Точка выхода
127
showMessage: function(message) {
128
    var existing = $("#m" + message.id);
129
    if (existing.length > 0) return;
130
    var node = 
$(message.html)
;
131
    node.hide();
132
    $("#inbox").append(node);
133
    node.slideDown();
#IfeN2wH2iaInmv7755qGqmjJRSw=
Идентификатор #626
Уязвимый файл
./demos/chat/static/chat.js : 130
Входной файл
./demos/chat/static/chat.js : 117
OWASP - A03 CWE-79
...\chat.js Точка входа
113
    console.log("Poll error; sleeping for", updater.errorSleepTime, "ms");
114
    window.setTimeout(updater.poll, updater.errorSleepTime);
115
},
117
newMessages: function(
response
) {
118
    if (!response.messages) return;
119
    var messages = response.messages;
120
    updater.cursor = messages[messages.length - 1].id;
...\chat.js Точка входа данных
113
    console.log("Poll error; sleeping for", updater.errorSleepTime, "ms");
114
    window.setTimeout(updater.poll, updater.errorSleepTime);
115
},
117
newMessages: function(
response
) {
118
    if (!response.messages) return;
119
    var messages = response.messages;
120
    updater.cursor = messages[messages.length - 1].id;
...\chat.js Изменение данных
115
},
117
newMessages: function(response) {
118
    if (!response.messages) return;
119
    var messages = 
response.messages
;
120
    updater.cursor = messages[messages.length - 1].id;
121
    console.log(messages.length, "new messages, cursor:", updater.cursor);
122
    for (var i = 0; i < messages.length; i++) {
...\chat.js Изменение данных
115
},
117
newMessages: function(response) {
118
    if (!response.messages) return;
119
    var 
messages
 = response.messages;
120
    updater.cursor = messages[messages.length - 1].id;
121
    console.log(messages.length, "new messages, cursor:", updater.cursor);
122
    for (var i = 0; i < messages.length; i++) {
...\chat.js Изменение данных
120
    updater.cursor = messages[messages.length - 1].id;
121
    console.log(messages.length, "new messages, cursor:", updater.cursor);
122
    for (var i = 0; i < messages.length; i++) {
123
        updater.showMessage(
messages[i]
);
124
    }
125
},
127
showMessage: function(message) {
...\chat.js Изменение данных
123
        updater.showMessage(messages[i]);
124
    }
125
},
127
showMessage: function(
message
) {
128
    var existing = $("#m" + message.id);
129
    if (existing.length > 0) return;
130
    var node = $(message.html);
...\chat.js Изменение данных
127
showMessage: function(message) {
128
    var existing = $("#m" + message.id);
129
    if (existing.length > 0) return;
130
    var node = $(
message.html
);
131
    node.hide();
132
    $("#inbox").append(node);
133
    node.slideDown();
...\chat.js Точка выхода
127
showMessage: function(message) {
128
    var existing = $("#m" + message.id);
129
    if (existing.length > 0) return;
130
    var node = 
$(message.html)
;
131
    node.hide();
132
    $("#inbox").append(node);
133
    node.slideDown();
#A4nveUfNlZheA+bzYyO7UtN4a9o=
Идентификатор #631
Уязвимый файл
./demos/chat/static/chat.js : 130
Входной файл
./demos/chat/static/chat.js : 127
OWASP - A03 CWE-79
...\chat.js Точка входа
123
        updater.showMessage(messages[i]);
124
    }
125
},
127
showMessage: function(
message
) {
128
    var existing = $("#m" + message.id);
129
    if (existing.length > 0) return;
130
    var node = $(message.html);
...\chat.js Точка входа данных
123
        updater.showMessage(messages[i]);
124
    }
125
},
127
showMessage: function(
message
) {
128
    var existing = $("#m" + message.id);
129
    if (existing.length > 0) return;
130
    var node = $(message.html);
...\chat.js Изменение данных
127
showMessage: function(message) {
128
    var existing = $("#m" + message.id);
129
    if (existing.length > 0) return;
130
    var node = $(
message.html
);
131
    node.hide();
132
    $("#inbox").append(node);
133
    node.slideDown();
...\chat.js Точка выхода
127
showMessage: function(message) {
128
    var existing = $("#m" + message.id);
129
    if (existing.length > 0) return;
130
    var node = 
$(message.html)
;
131
    node.hide();
132
    $("#inbox").append(node);
133
    node.slideDown();
Потенциальная
JQuery добавление HTML кода в DOM
Описание уязвимости
Уязвимый код 61  $("#m" + message.id)
#ELd4dyxF3BIS/T8+EFsu5GDmiqE=
Идентификатор #655
Уязвимый файл
./demos/websocket/static/chat.js : 61
Входной файл
./demos/websocket/static/chat.js : 60
OWASP - A03 CWE-79
...\chat.js Точка входа
56
        updater.showMessage(JSON.parse(event.data));
57
    }
58
},
60
showMessage: function(
message
) {
61
    var existing = $("#m" + message.id);
62
    if (existing.length > 0) return;
63
    var node = $(message.html);
...\chat.js Точка входа данных
56
        updater.showMessage(JSON.parse(event.data));
57
    }
58
},
60
showMessage: function(
message
) {
61
    var existing = $("#m" + message.id);
62
    if (existing.length > 0) return;
63
    var node = $(message.html);
...\chat.js Изменение данных
57
    }
58
},
60
showMessage: function(message) {
61
    var existing = $("#m" + 
message.id
);
62
    if (existing.length > 0) return;
63
    var node = $(message.html);
64
    node.hide();
...\chat.js Изменение данных
57
    }
58
},
60
showMessage: function(message) {
61
    var existing = $(
"#m" + message.id
);
62
    if (existing.length > 0) return;
63
    var node = $(message.html);
64
    node.hide();
...\chat.js Точка выхода
57
    }
58
},
60
showMessage: function(message) {
61
    var existing = 
$("#m" + message.id)
;
62
    if (existing.length > 0) return;
63
    var node = $(message.html);
64
    node.hide();
Потенциальная
JQuery добавление HTML кода в DOM
Описание уязвимости
Уязвимый код 63  $(message.html)
#QLVTKwT1Fsl7SsTdcggWM+Y8dJ8=
Идентификатор #656
Уязвимый файл
./demos/websocket/static/chat.js : 63
Входной файл
./demos/websocket/static/chat.js : 60
OWASP - A03 CWE-79
...\chat.js Точка входа
56
        updater.showMessage(JSON.parse(event.data));
57
    }
58
},
60
showMessage: function(
message
) {
61
    var existing = $("#m" + message.id);
62
    if (existing.length > 0) return;
63
    var node = $(message.html);
...\chat.js Точка входа данных
56
        updater.showMessage(JSON.parse(event.data));
57
    }
58
},
60
showMessage: function(
message
) {
61
    var existing = $("#m" + message.id);
62
    if (existing.length > 0) return;
63
    var node = $(message.html);
...\chat.js Изменение данных
60
showMessage: function(message) {
61
    var existing = $("#m" + message.id);
62
    if (existing.length > 0) return;
63
    var node = $(
message.html
);
64
    node.hide();
65
    $("#inbox").append(node);
66
    node.slideDown();
...\chat.js Точка выхода
60
showMessage: function(message) {
61
    var existing = $("#m" + message.id);
62
    if (existing.length > 0) return;
63
    var node = 
$(message.html)
;
64
    node.hide();
65
    $("#inbox").append(node);
66
    node.slideDown();
Потенциальная
JQuery небезопасная функция для DOM
Описание уязвимости
Уязвимый код 132  $("#inbox").append(node)
#qVHkpPpjAlWT6yViJQ242QyqcN0=
Идентификатор #634
Уязвимый файл
./demos/chat/static/chat.js : 132
Входной файл
./demos/chat/static/chat.js : 100
OWASP - A03 CWE-79
...\chat.js Точка входа
96
            data: $.param(args), success: updater.onSuccess,
97
            error: updater.onError});
98
},
100
onSuccess: function(
response
) {
101
    try {
102
        updater.newMessages(eval("(" + response + ")"));
103
    } catch (e) {
...\chat.js Точка входа данных
96
            data: $.param(args), success: updater.onSuccess,
97
            error: updater.onError});
98
},
100
onSuccess: function(
response
) {
101
    try {
102
        updater.newMessages(eval("(" + response + ")"));
103
    } catch (e) {
...\chat.js Изменение данных
98
},
100
onSuccess: function(response) {
101
    try {
102
        updater.newMessages(eval("(" + 
response
 + ")"));
103
    } catch (e) {
104
        updater.onError();
105
        return;
...\chat.js Изменение данных
98
},
100
onSuccess: function(response) {
101
    try {
102
        updater.newMessages(eval(
"(" + response + ")"
));
103
    } catch (e) {
104
        updater.onError();
105
        return;
...\chat.js Изменение данных
98
},
100
onSuccess: function(response) {
101
    try {
102
        updater.newMessages(
eval("(" + response + ")")
);
103
    } catch (e) {
104
        updater.onError();
105
        return;
...\chat.js Изменение данных
113
    console.log("Poll error; sleeping for", updater.errorSleepTime, "ms");
114
    window.setTimeout(updater.poll, updater.errorSleepTime);
115
},
117
newMessages: function(
response
) {
118
    if (!response.messages) return;
119
    var messages = response.messages;
120
    updater.cursor = messages[messages.length - 1].id;
...\chat.js Изменение данных
115
},
117
newMessages: function(response) {
118
    if (!response.messages) return;
119
    var messages = 
response.messages
;
120
    updater.cursor = messages[messages.length - 1].id;
121
    console.log(messages.length, "new messages, cursor:", updater.cursor);
122
    for (var i = 0; i < messages.length; i++) {
...\chat.js Изменение данных
115
},
117
newMessages: function(response) {
118
    if (!response.messages) return;
119
    var 
messages
 = response.messages;
120
    updater.cursor = messages[messages.length - 1].id;
121
    console.log(messages.length, "new messages, cursor:", updater.cursor);
122
    for (var i = 0; i < messages.length; i++) {
...\chat.js Изменение данных
120
    updater.cursor = messages[messages.length - 1].id;
121
    console.log(messages.length, "new messages, cursor:", updater.cursor);
122
    for (var i = 0; i < messages.length; i++) {
123
        updater.showMessage(
messages[i]
);
124
    }
125
},
127
showMessage: function(message) {
...\chat.js Изменение данных
123
        updater.showMessage(messages[i]);
124
    }
125
},
127
showMessage: function(
message
) {
128
    var existing = $("#m" + message.id);
129
    if (existing.length > 0) return;
130
    var node = $(message.html);
...\chat.js Изменение данных
127
showMessage: function(message) {
128
    var existing = $("#m" + message.id);
129
    if (existing.length > 0) return;
130
    var node = $(
message.html
);
131
    node.hide();
132
    $("#inbox").append(node);
133
    node.slideDown();
...\chat.js Изменение данных
127
showMessage: function(message) {
128
    var existing = $("#m" + message.id);
129
    if (existing.length > 0) return;
130
    var node = 
$(message.html)
;
131
    node.hide();
132
    $("#inbox").append(node);
133
    node.slideDown();
...\chat.js Изменение данных
127
showMessage: function(message) {
128
    var existing = $("#m" + message.id);
129
    if (existing.length > 0) return;
130
    var 
node
 = $(message.html);
131
    node.hide();
132
    $("#inbox").append(node);
133
    node.slideDown();
...\chat.js Изменение данных
129
        if (existing.length > 0) return;
130
        var node = $(message.html);
131
        node.hide();
132
        $("#inbox").append(
node
);
133
        node.slideDown();
134
    }
135
};
...\chat.js Точка выхода
129
        if (existing.length > 0) return;
130
        var node = $(message.html);
131
        node.hide();
132
        
$("#inbox").append(node)
;
133
        node.slideDown();
134
    }
135
};
#qM+G06ebcGBmt68RdSR7KAlHWd8=
Идентификатор #637
Уязвимый файл
./demos/chat/static/chat.js : 132
Входной файл
./demos/chat/static/chat.js : 117
OWASP - A03 CWE-79
...\chat.js Точка входа
113
    console.log("Poll error; sleeping for", updater.errorSleepTime, "ms");
114
    window.setTimeout(updater.poll, updater.errorSleepTime);
115
},
117
newMessages: function(
response
) {
118
    if (!response.messages) return;
119
    var messages = response.messages;
120
    updater.cursor = messages[messages.length - 1].id;
...\chat.js Точка входа данных
113
    console.log("Poll error; sleeping for", updater.errorSleepTime, "ms");
114
    window.setTimeout(updater.poll, updater.errorSleepTime);
115
},
117
newMessages: function(
response
) {
118
    if (!response.messages) return;
119
    var messages = response.messages;
120
    updater.cursor = messages[messages.length - 1].id;
...\chat.js Изменение данных
115
},
117
newMessages: function(response) {
118
    if (!response.messages) return;
119
    var messages = 
response.messages
;
120
    updater.cursor = messages[messages.length - 1].id;
121
    console.log(messages.length, "new messages, cursor:", updater.cursor);
122
    for (var i = 0; i < messages.length; i++) {
...\chat.js Изменение данных
115
},
117
newMessages: function(response) {
118
    if (!response.messages) return;
119
    var 
messages
 = response.messages;
120
    updater.cursor = messages[messages.length - 1].id;
121
    console.log(messages.length, "new messages, cursor:", updater.cursor);
122
    for (var i = 0; i < messages.length; i++) {
...\chat.js Изменение данных
120
    updater.cursor = messages[messages.length - 1].id;
121
    console.log(messages.length, "new messages, cursor:", updater.cursor);
122
    for (var i = 0; i < messages.length; i++) {
123
        updater.showMessage(
messages[i]
);
124
    }
125
},
127
showMessage: function(message) {
...\chat.js Изменение данных
123
        updater.showMessage(messages[i]);
124
    }
125
},
127
showMessage: function(
message
) {
128
    var existing = $("#m" + message.id);
129
    if (existing.length > 0) return;
130
    var node = $(message.html);
...\chat.js Изменение данных
127
showMessage: function(message) {
128
    var existing = $("#m" + message.id);
129
    if (existing.length > 0) return;
130
    var node = $(
message.html
);
131
    node.hide();
132
    $("#inbox").append(node);
133
    node.slideDown();
...\chat.js Изменение данных
127
showMessage: function(message) {
128
    var existing = $("#m" + message.id);
129
    if (existing.length > 0) return;
130
    var node = 
$(message.html)
;
131
    node.hide();
132
    $("#inbox").append(node);
133
    node.slideDown();
...\chat.js Изменение данных
127
showMessage: function(message) {
128
    var existing = $("#m" + message.id);
129
    if (existing.length > 0) return;
130
    var 
node
 = $(message.html);
131
    node.hide();
132
    $("#inbox").append(node);
133
    node.slideDown();
...\chat.js Изменение данных
129
        if (existing.length > 0) return;
130
        var node = $(message.html);
131
        node.hide();
132
        $("#inbox").append(
node
);
133
        node.slideDown();
134
    }
135
};
...\chat.js Точка выхода
129
        if (existing.length > 0) return;
130
        var node = $(message.html);
131
        node.hide();
132
        
$("#inbox").append(node)
;
133
        node.slideDown();
134
    }
135
};
#/9pEekUQNZEekh4qpynsdgT/FwA=
Идентификатор #639
Уязвимый файл
./demos/chat/static/chat.js : 132
Входной файл
./demos/chat/static/chat.js : 127
OWASP - A03 CWE-79
...\chat.js Точка входа
123
        updater.showMessage(messages[i]);
124
    }
125
},
127
showMessage: function(
message
) {
128
    var existing = $("#m" + message.id);
129
    if (existing.length > 0) return;
130
    var node = $(message.html);
...\chat.js Точка входа данных
123
        updater.showMessage(messages[i]);
124
    }
125
},
127
showMessage: function(
message
) {
128
    var existing = $("#m" + message.id);
129
    if (existing.length > 0) return;
130
    var node = $(message.html);
...\chat.js Изменение данных
127
showMessage: function(message) {
128
    var existing = $("#m" + message.id);
129
    if (existing.length > 0) return;
130
    var node = $(
message.html
);
131
    node.hide();
132
    $("#inbox").append(node);
133
    node.slideDown();
...\chat.js Изменение данных
127
showMessage: function(message) {
128
    var existing = $("#m" + message.id);
129
    if (existing.length > 0) return;
130
    var node = 
$(message.html)
;
131
    node.hide();
132
    $("#inbox").append(node);
133
    node.slideDown();
...\chat.js Изменение данных
127
showMessage: function(message) {
128
    var existing = $("#m" + message.id);
129
    if (existing.length > 0) return;
130
    var 
node
 = $(message.html);
131
    node.hide();
132
    $("#inbox").append(node);
133
    node.slideDown();
...\chat.js Изменение данных
129
        if (existing.length > 0) return;
130
        var node = $(message.html);
131
        node.hide();
132
        $("#inbox").append(
node
);
133
        node.slideDown();
134
    }
135
};
...\chat.js Точка выхода
129
        if (existing.length > 0) return;
130
        var node = $(message.html);
131
        node.hide();
132
        
$("#inbox").append(node)
;
133
        node.slideDown();
134
    }
135
};
Потенциальная
JQuery небезопасная функция для DOM
Описание уязвимости
Уязвимый код 65  $("#inbox").append(node)
#7HDDVg+E/0x4xF+Kn6wYlJiKwB0=
Идентификатор #658
Уязвимый файл
./demos/websocket/static/chat.js : 65
Входной файл
./demos/websocket/static/chat.js : 60
OWASP - A03 CWE-79
...\chat.js Точка входа
56
        updater.showMessage(JSON.parse(event.data));
57
    }
58
},
60
showMessage: function(
message
) {
61
    var existing = $("#m" + message.id);
62
    if (existing.length > 0) return;
63
    var node = $(message.html);
...\chat.js Точка входа данных
56
        updater.showMessage(JSON.parse(event.data));
57
    }
58
},
60
showMessage: function(
message
) {
61
    var existing = $("#m" + message.id);
62
    if (existing.length > 0) return;
63
    var node = $(message.html);
...\chat.js Изменение данных
60
showMessage: function(message) {
61
    var existing = $("#m" + message.id);
62
    if (existing.length > 0) return;
63
    var node = $(
message.html
);
64
    node.hide();
65
    $("#inbox").append(node);
66
    node.slideDown();
...\chat.js Изменение данных
60
showMessage: function(message) {
61
    var existing = $("#m" + message.id);
62
    if (existing.length > 0) return;
63
    var node = 
$(message.html)
;
64
    node.hide();
65
    $("#inbox").append(node);
66
    node.slideDown();
...\chat.js Изменение данных
60
showMessage: function(message) {
61
    var existing = $("#m" + message.id);
62
    if (existing.length > 0) return;
63
    var 
node
 = $(message.html);
64
    node.hide();
65
    $("#inbox").append(node);
66
    node.slideDown();
...\chat.js Изменение данных
62
        if (existing.length > 0) return;
63
        var node = $(message.html);
64
        node.hide();
65
        $("#inbox").append(
node
);
66
        node.slideDown();
67
    }
68
};
...\chat.js Точка выхода
62
        if (existing.length > 0) return;
63
        var node = $(message.html);
64
        node.hide();
65
        
$("#inbox").append(node)
;
66
        node.slideDown();
67
    }
68
};

Из предыдущих сканирований (305)

Высокая
Внедрение SQL-кода
Описание уязвимости
Уязвимый код 197  self.execute( "UPDATE entries SET title = %s, markdown = %s, html = %s " "WHERE id = %s", title, text, html, int(id), )
#xP5l9sBM2KZiw4OMSP/fhQCfFEY=
Идентификатор #467
Уязвимый файл
./demos/blog/blog.py : 197
Входной файл
./demos/blog/blog.py : 186
OWASP - A03 CWE-89
...\blog.py Точка входа
183
@tornado.web.authenticated
184
async def post(self):
185
    id = self.get_argument("id", None)
186
    title = 
self.get_argument
("title")
187
    text = self.get_argument("markdown")
188
    html = markdown.markdown(text)
189
    if id:
...\blog.py Точка входа данных
183
@tornado.web.authenticated
184
async def post(self):
185
    id = self.get_argument("id", None)
186
    title = 
self.get_argument
("title")
187
    text = self.get_argument("markdown")
188
    html = markdown.markdown(text)
189
    if id:
...\blog.py Изменение данных
183
@tornado.web.authenticated
184
async def post(self):
185
    id = self.get_argument("id", None)
186
    title = 
self.get_argument("title")

                                                                                                                
                                                                                                        
                                                                                                        
187
    text = self.get_argument("markdown")
188
    html = markdown.markdown(text)
189
    if id:
...\blog.py Изменение данных
183
@tornado.web.authenticated
184
async def post(self):
185
    id = self.get_argument("id", None)
186
    
title
 = self.get_argument("title")
187
    text = self.get_argument("markdown")
188
    html = markdown.markdown(text)
189
    if id:
...\blog.py Изменение данных
197
await self.execute(
198
    "UPDATE entries SET title = %s, markdown = %s, html = %s "
199
    "WHERE id = %s",
200
    
title
,
201
    text,
202
    html,
203
    int(id),
...\blog.py Точка выхода
194
except NoResultError:
195
    raise tornado.web.HTTPError(404)
196
slug = entry.slug
197

                                                                                                                
                                                                                                        
                                                                                                            
                                                                                                                
                                                                                                                    
await self.execute(

                                                                                                                
                                                                                                        
                                                                                                        
198
    "UPDATE entries SET title = %s, markdown = %s, html = %s "
199
    "WHERE id = %s",
200
    title,
#DuKqQj/gSEDdmel5FhOCwvQC+Rw=
Идентификатор #474
Уязвимый файл
./demos/blog/blog.py : 197
Входной файл
./demos/blog/blog.py : 187
OWASP - A03 CWE-89
...\blog.py Точка входа
184
async def post(self):
185
    id = self.get_argument("id", None)
186
    title = self.get_argument("title")
187
    text = 
self.get_argument
("markdown")
188
    html = markdown.markdown(text)
189
    if id:
190
        try:
...\blog.py Точка входа данных
184
async def post(self):
185
    id = self.get_argument("id", None)
186
    title = self.get_argument("title")
187
    text = 
self.get_argument
("markdown")
188
    html = markdown.markdown(text)
189
    if id:
190
        try:
...\blog.py Изменение данных
184
async def post(self):
185
    id = self.get_argument("id", None)
186
    title = self.get_argument("title")
187
    text = 
self.get_argument("markdown")

                                                                                                                
                                                                                                        
                                                                                                        
188
    html = markdown.markdown(text)
189
    if id:
190
        try:
...\blog.py Изменение данных
184
async def post(self):
185
    id = self.get_argument("id", None)
186
    title = self.get_argument("title")
187
    
text
 = self.get_argument("markdown")
188
    html = markdown.markdown(text)
189
    if id:
190
        try:
...\blog.py Изменение данных
185
id = self.get_argument("id", None)
186
title = self.get_argument("title")
187
text = self.get_argument("markdown")
188
html = markdown.markdown(
text
)
189
if id:
190
    try:
191
        entry = await self.queryone(
...\blog.py Изменение данных
185
id = self.get_argument("id", None)
186
title = self.get_argument("title")
187
text = self.get_argument("markdown")
188
html = 
markdown.markdown(text)

                                                                                                                
                                                                                                        
                                                                                                        
189
if id:
190
    try:
191
        entry = await self.queryone(
...\blog.py Изменение данных
185
id = self.get_argument("id", None)
186
title = self.get_argument("title")
187
text = self.get_argument("markdown")
188

                                                                                                                
                                                                                                        
                                                                                                            
                                                                                                                
                                                                                                                    
html
 = markdown.markdown(text)
189
if id:
190
    try:
191
        entry = await self.queryone(
...\blog.py Изменение данных
199
        "WHERE id = %s",
200
        title,
201
        text,
202
        
html
,
203
        int(id),
204
    )
205
else:
...\blog.py Точка выхода
194
except NoResultError:
195
    raise tornado.web.HTTPError(404)
196
slug = entry.slug
197

                                                                                                                
                                                                                                        
                                                                                                            
                                                                                                                
                                                                                                                    
await self.execute(

                                                                                                                
                                                                                                        
                                                                                                        
198
    "UPDATE entries SET title = %s, markdown = %s, html = %s "
199
    "WHERE id = %s",
200
    title,
#wheSQLW+Fy0WV/rDFCbKCxA/N+E=
Идентификатор #480
Уязвимый файл
./demos/blog/blog.py : 197
Входной файл
./demos/blog/blog.py : 187
OWASP - A03 CWE-89
...\blog.py Точка входа
184
async def post(self):
185
    id = self.get_argument("id", None)
186
    title = self.get_argument("title")
187
    text = 
self.get_argument
("markdown")
188
    html = markdown.markdown(text)
189
    if id:
190
        try:
...\blog.py Точка входа данных
184
async def post(self):
185
    id = self.get_argument("id", None)
186
    title = self.get_argument("title")
187
    text = 
self.get_argument
("markdown")
188
    html = markdown.markdown(text)
189
    if id:
190
        try:
...\blog.py Изменение данных
184
async def post(self):
185
    id = self.get_argument("id", None)
186
    title = self.get_argument("title")
187
    text = 
self.get_argument("markdown")

                                                                                                                
                                                                                                        
                                                                                                        
188
    html = markdown.markdown(text)
189
    if id:
190
        try:
...\blog.py Изменение данных
184
async def post(self):
185
    id = self.get_argument("id", None)
186
    title = self.get_argument("title")
187
    
text
 = self.get_argument("markdown")
188
    html = markdown.markdown(text)
189
    if id:
190
        try:
...\blog.py Изменение данных
198
    "UPDATE entries SET title = %s, markdown = %s, html = %s "
199
    "WHERE id = %s",
200
    title,
201
    
text
,
202
    html,
203
    int(id),
204
)
...\blog.py Точка выхода
194
except NoResultError:
195
    raise tornado.web.HTTPError(404)
196
slug = entry.slug
197

                                                                                                                
                                                                                                        
                                                                                                            
                                                                                                                
                                                                                                                    
await self.execute(

                                                                                                                
                                                                                                        
                                                                                                        
198
    "UPDATE entries SET title = %s, markdown = %s, html = %s "
199
    "WHERE id = %s",
200
    title,
Высокая
Внедрение SQL-кода
Описание уязвимости
Уязвимый код 217  self.execute( "INSERT INTO entries (author_id,title,slug,markdown,html,published,updated)" "VALUES (%s,%s,%s,%s,%s,CURRENT_TIMESTAMP,CURRENT_TIMESTAMP)", self.current_user.id, title, slug, text, html, )
#5xcmb0iPqG6bbgpUZ7hIyceVsRs=
Идентификатор #469
Уязвимый файл
./demos/blog/blog.py : 217
Входной файл
./demos/blog/blog.py : 186
OWASP - A03 CWE-89
...\blog.py Точка входа
183
@tornado.web.authenticated
184
async def post(self):
185
    id = self.get_argument("id", None)
186
    title = 
self.get_argument
("title")
187
    text = self.get_argument("markdown")
188
    html = markdown.markdown(text)
189
    if id:
...\blog.py Точка входа данных
183
@tornado.web.authenticated
184
async def post(self):
185
    id = self.get_argument("id", None)
186
    title = 
self.get_argument
("title")
187
    text = self.get_argument("markdown")
188
    html = markdown.markdown(text)
189
    if id:
...\blog.py Изменение данных
183
@tornado.web.authenticated
184
async def post(self):
185
    id = self.get_argument("id", None)
186
    title = 
self.get_argument("title")

                                                                                                                
                                                                                                        
                                                                                                        
187
    text = self.get_argument("markdown")
188
    html = markdown.markdown(text)
189
    if id:
...\blog.py Изменение данных
183
@tornado.web.authenticated
184
async def post(self):
185
    id = self.get_argument("id", None)
186
    
title
 = self.get_argument("title")
187
    text = self.get_argument("markdown")
188
    html = markdown.markdown(text)
189
    if id:
...\blog.py Изменение данных
203
        int(id),
204
    )
205
else:
206
    slug = unicodedata.normalize("NFKD", 
title
)
207
    slug = re.sub(r"[^\w]+", " ", slug)
208
    slug = "-".join(slug.lower().strip().split())
209
    slug = slug.encode("ascii", "ignore").decode("ascii")
...\blog.py Изменение данных
203
        int(id),
204
    )
205
else:
206
    slug = 
unicodedata.normalize("NFKD", title)

                                                                                                                
                                                                                                        
                                                                                                        
207
    slug = re.sub(r"[^\w]+", " ", slug)
208
    slug = "-".join(slug.lower().strip().split())
209
    slug = slug.encode("ascii", "ignore").decode("ascii")
...\blog.py Изменение данных
203
        int(id),
204
    )
205
else:
206
    
slug
 = unicodedata.normalize("NFKD", title)
207
    slug = re.sub(r"[^\w]+", " ", slug)
208
    slug = "-".join(slug.lower().strip().split())
209
    slug = slug.encode("ascii", "ignore").decode("ascii")
...\blog.py Изменение данных
204
    )
205
else:
206
    slug = unicodedata.normalize("NFKD", title)
207
    
slug
 = re.sub(r"[^\w]+", " ", slug)
208
    slug = "-".join(slug.lower().strip().split())
209
    slug = slug.encode("ascii", "ignore").decode("ascii")
210
    if not slug:
...\blog.py Изменение данных
204
    )
205
else:
206
    slug = unicodedata.normalize("NFKD", title)
207
    slug = 
re.sub(r"[^\w]+", " ", slug)

                                                                                                                
                                                                                                        
                                                                                                        
208
    slug = "-".join(slug.lower().strip().split())
209
    slug = slug.encode("ascii", "ignore").decode("ascii")
210
    if not slug:
...\blog.py Изменение данных
204
    )
205
else:
206
    slug = unicodedata.normalize("NFKD", title)
207
    
slug
 = re.sub(r"[^\w]+", " ", slug)
208
    slug = "-".join(slug.lower().strip().split())
209
    slug = slug.encode("ascii", "ignore").decode("ascii")
210
    if not slug:
...\blog.py Изменение данных
205
else:
206
    slug = unicodedata.normalize("NFKD", title)
207
    slug = re.sub(r"[^\w]+", " ", slug)
208
    slug = "-".join(
slug.lower().strip().split
())
209
    slug = slug.encode("ascii", "ignore").decode("ascii")
210
    if not slug:
211
        slug = "entry"
...\blog.py Изменение данных
205
else:
206
    slug = unicodedata.normalize("NFKD", title)
207
    slug = re.sub(r"[^\w]+", " ", slug)
208
    slug = "-".join(
slug.lower().strip().split()
)
209
    slug = slug.encode("ascii", "ignore").decode("ascii")
210
    if not slug:
211
        slug = "entry"
...\blog.py Изменение данных
205
else:
206
    slug = unicodedata.normalize("NFKD", title)
207
    slug = re.sub(r"[^\w]+", " ", slug)
208
    slug = "
-".join(slug.lower().strip().split())

                                                                                                                
                                                                                                        
                                                                                                        
209
    slug = slug.encode("ascii", "ignore").decode("ascii")
210
    if not slug:
211
        slug = "entry"
...\blog.py Изменение данных
205
else:
206
    slug = unicodedata.normalize("NFKD", title)
207
    slug = re.sub(r"[^\w]+", " ", slug)
208
    
slug
 = "-".join(slug.lower().strip().split())
209
    slug = slug.encode("ascii", "ignore").decode("ascii")
210
    if not slug:
211
        slug = "entry"
...\blog.py Изменение данных
206
slug = unicodedata.normalize("NFKD", title)
207
slug = re.sub(r"[^\w]+", " ", slug)
208
slug = "-".join(slug.lower().strip().split())
209
slug = 
slug.encode("ascii", "ignore").decode
("ascii")
210
if not slug:
211
    slug = "entry"
212
while True:
...\blog.py Изменение данных
206
slug = unicodedata.normalize("NFKD", title)
207
slug = re.sub(r"[^\w]+", " ", slug)
208
slug = "-".join(slug.lower().strip().split())
209
slug = 
slug.encode("ascii", "ignore").decode("ascii")

                                                                                                                
                                                                                                        
                                                                                                        
210
if not slug:
211
    slug = "entry"
212
while True:
...\blog.py Изменение данных
206
slug = unicodedata.normalize("NFKD", title)
207
slug = re.sub(r"[^\w]+", " ", slug)
208
slug = "-".join(slug.lower().strip().split())
209

                                                                                                                
                                                                                                        
                                                                                                            
                                                                                                                
                                                                                                                    
slug
 = slug.encode("ascii", "ignore").decode("ascii")
210
if not slug:
211
    slug = "entry"
212
while True:
...\blog.py Изменение данных
213
    e = await self.query("SELECT * FROM entries WHERE slug = %s", slug)
214
    if not e:
215
        break
216
    
slug
 += "-2"
217
await self.execute(
218
    "INSERT INTO entries (author_id,title,slug,markdown,html,published,updated)"
219
    "VALUES (%s,%s,%s,%s,%s,CURRENT_TIMESTAMP,CURRENT_TIMESTAMP)",
...\blog.py Изменение данных
213
    e = await self.query("SELECT * FROM entries WHERE slug = %s", slug)
214
    if not e:
215
        break
216
    
slug += "-2"

                                                                                                                
                                                                                                        
                                                                                                        
217
await self.execute(
218
    "INSERT INTO entries (author_id,title,slug,markdown,html,published,updated)"
219
    "VALUES (%s,%s,%s,%s,%s,CURRENT_TIMESTAMP,CURRENT_TIMESTAMP)",
...\blog.py Изменение данных
219
    "VALUES (%s,%s,%s,%s,%s,CURRENT_TIMESTAMP,CURRENT_TIMESTAMP)",
220
    self.current_user.id,
221
    title,
222
    
slug
,
223
    text,
224
    html,
225
)
...\blog.py Точка выхода
214
    if not e:
215
        break
216
    slug += "-2"
217

                                                                                                                
                                                                                                        
                                                                                                            
                                                                                                                
                                                                                                                    
await self.execute(

                                                                                                                
                                                                                                        
                                                                                                        
218
    "INSERT INTO entries (author_id,title,slug,markdown,html,published,updated)"
219
    "VALUES (%s,%s,%s,%s,%s,CURRENT_TIMESTAMP,CURRENT_TIMESTAMP)",
220
    self.current_user.id,
#Q/U+ohvRlDuAnU4y86p8NLei7fo=
Идентификатор #471
Уязвимый файл
./demos/blog/blog.py : 217
Входной файл
./demos/blog/blog.py : 186
OWASP - A03 CWE-89
...\blog.py Точка входа
183
@tornado.web.authenticated
184
async def post(self):
185
    id = self.get_argument("id", None)
186
    title = 
self.get_argument
("title")
187
    text = self.get_argument("markdown")
188
    html = markdown.markdown(text)
189
    if id:
...\blog.py Точка входа данных
183
@tornado.web.authenticated
184
async def post(self):
185
    id = self.get_argument("id", None)
186
    title = 
self.get_argument
("title")
187
    text = self.get_argument("markdown")
188
    html = markdown.markdown(text)
189
    if id:
...\blog.py Изменение данных
183
@tornado.web.authenticated
184
async def post(self):
185
    id = self.get_argument("id", None)
186
    title = 
self.get_argument("title")

                                                                                                                
                                                                                                        
                                                                                                        
187
    text = self.get_argument("markdown")
188
    html = markdown.markdown(text)
189
    if id:
...\blog.py Изменение данных
183
@tornado.web.authenticated
184
async def post(self):
185
    id = self.get_argument("id", None)
186
    
title
 = self.get_argument("title")
187
    text = self.get_argument("markdown")
188
    html = markdown.markdown(text)
189
    if id:
...\blog.py Изменение данных
218
"INSERT INTO entries (author_id,title,slug,markdown,html,published,updated)"
219
"VALUES (%s,%s,%s,%s,%s,CURRENT_TIMESTAMP,CURRENT_TIMESTAMP)",
220
self.current_user.id,
221

                                                                                                                
                                                                                                        
                                                                                                            
                                                                                                                
                                                                                                                    
title
,
222
slug,
223
text,
224
html,
...\blog.py Точка выхода
214
    if not e:
215
        break
216
    slug += "-2"
217

                                                                                                                
                                                                                                        
                                                                                                            
                                                                                                                
                                                                                                                    
await self.execute(

                                                                                                                
                                                                                                        
                                                                                                        
218
    "INSERT INTO entries (author_id,title,slug,markdown,html,published,updated)"
219
    "VALUES (%s,%s,%s,%s,%s,CURRENT_TIMESTAMP,CURRENT_TIMESTAMP)",
220
    self.current_user.id,
#9dj6mpoIIk3sRBYFEncXhZX2oJg=
Идентификатор #477
Уязвимый файл
./demos/blog/blog.py : 217
Входной файл
./demos/blog/blog.py : 187
OWASP - A03 CWE-89
...\blog.py Точка входа
184
async def post(self):
185
    id = self.get_argument("id", None)
186
    title = self.get_argument("title")
187
    text = 
self.get_argument
("markdown")
188
    html = markdown.markdown(text)
189
    if id:
190
        try:
...\blog.py Точка входа данных
184
async def post(self):
185
    id = self.get_argument("id", None)
186
    title = self.get_argument("title")
187
    text = 
self.get_argument
("markdown")
188
    html = markdown.markdown(text)
189
    if id:
190
        try:
...\blog.py Изменение данных
184
async def post(self):
185
    id = self.get_argument("id", None)
186
    title = self.get_argument("title")
187
    text = 
self.get_argument("markdown")

                                                                                                                
                                                                                                        
                                                                                                        
188
    html = markdown.markdown(text)
189
    if id:
190
        try:
...\blog.py Изменение данных
184
async def post(self):
185
    id = self.get_argument("id", None)
186
    title = self.get_argument("title")
187
    
text
 = self.get_argument("markdown")
188
    html = markdown.markdown(text)
189
    if id:
190
        try:
...\blog.py Изменение данных
185
id = self.get_argument("id", None)
186
title = self.get_argument("title")
187
text = self.get_argument("markdown")
188
html = markdown.markdown(
text
)
189
if id:
190
    try:
191
        entry = await self.queryone(
...\blog.py Изменение данных
185
id = self.get_argument("id", None)
186
title = self.get_argument("title")
187
text = self.get_argument("markdown")
188
html = 
markdown.markdown(text)

                                                                                                                
                                                                                                        
                                                                                                        
189
if id:
190
    try:
191
        entry = await self.queryone(
...\blog.py Изменение данных
185
id = self.get_argument("id", None)
186
title = self.get_argument("title")
187
text = self.get_argument("markdown")
188

                                                                                                                
                                                                                                        
                                                                                                            
                                                                                                                
                                                                                                                    
html
 = markdown.markdown(text)
189
if id:
190
    try:
191
        entry = await self.queryone(
...\blog.py Изменение данных
221
                title,
222
                slug,
223
                text,
224
                
html
,
225
            )
226
        self.redirect("/entry/" + slug)
229
class AuthCreateHandler(BaseHandler):
...\blog.py Точка выхода
214
    if not e:
215
        break
216
    slug += "-2"
217

                                                                                                                
                                                                                                        
                                                                                                            
                                                                                                                
                                                                                                                    
await self.execute(

                                                                                                                
                                                                                                        
                                                                                                        
218
    "INSERT INTO entries (author_id,title,slug,markdown,html,published,updated)"
219
    "VALUES (%s,%s,%s,%s,%s,CURRENT_TIMESTAMP,CURRENT_TIMESTAMP)",
220
    self.current_user.id,
#m5gIZKLbn7qeocmDtDe/Zp7FaaQ=
Идентификатор #482
Уязвимый файл
./demos/blog/blog.py : 217
Входной файл
./demos/blog/blog.py : 187
OWASP - A03 CWE-89
...\blog.py Точка входа
184
async def post(self):
185
    id = self.get_argument("id", None)
186
    title = self.get_argument("title")
187
    text = 
self.get_argument
("markdown")
188
    html = markdown.markdown(text)
189
    if id:
190
        try:
...\blog.py Точка входа данных
184
async def post(self):
185
    id = self.get_argument("id", None)
186
    title = self.get_argument("title")
187
    text = 
self.get_argument
("markdown")
188
    html = markdown.markdown(text)
189
    if id:
190
        try:
...\blog.py Изменение данных
184
async def post(self):
185
    id = self.get_argument("id", None)
186
    title = self.get_argument("title")
187
    text = 
self.get_argument("markdown")

                                                                                                                
                                                                                                        
                                                                                                        
188
    html = markdown.markdown(text)
189
    if id:
190
        try:
...\blog.py Изменение данных
184
async def post(self):
185
    id = self.get_argument("id", None)
186
    title = self.get_argument("title")
187
    
text
 = self.get_argument("markdown")
188
    html = markdown.markdown(text)
189
    if id:
190
        try:
...\blog.py Изменение данных
220
        self.current_user.id,
221
        title,
222
        slug,
223
        
text
,
224
        html,
225
    )
226
self.redirect("/entry/" + slug)
...\blog.py Точка выхода
214
    if not e:
215
        break
216
    slug += "-2"
217

                                                                                                                
                                                                                                        
                                                                                                            
                                                                                                                
                                                                                                                    
await self.execute(

                                                                                                                
                                                                                                        
                                                                                                        
218
    "INSERT INTO entries (author_id,title,slug,markdown,html,published,updated)"
219
    "VALUES (%s,%s,%s,%s,%s,CURRENT_TIMESTAMP,CURRENT_TIMESTAMP)",
220
    self.current_user.id,
Высокая
Удаленное выполнение кода
Описание уязвимости
Уязвимый код 243  os.execv(sys.executable, [sys.executable] + argv)
#kKAi9QzHGqmTPea83tfvXk+vXYI=
Идентификатор #308
Уязвимый файл
./tornado/autoreload.py : 243
Входной файл
./tornado/autoreload.py : 229
OWASP - A03 CWE-94
...\autoreload.py Точка входа
226
    argv = _original_argv
227
else:
228
    spec = getattr(sys.modules["__main__"], "__spec__", None)
229
    argv = 
sys.argv

                                                                                                                
                                                                                                        
                                                                                                        
230
if spec:
231
    argv = ["-m", spec.name] + argv[1:]
232
else:
...\autoreload.py Точка входа данных
226
    argv = _original_argv
227
else:
228
    spec = getattr(sys.modules["__main__"], "__spec__", None)
229
    argv = 
sys.argv

                                                                                                                
                                                                                                        
                                                                                                        
230
if spec:
231
    argv = ["-m", spec.name] + argv[1:]
232
else:
...\autoreload.py Изменение данных
226
    argv = _original_argv
227
else:
228
    spec = getattr(sys.modules["__main__"], "__spec__", None)
229
    
argv
 = sys.argv
230
if spec:
231
    argv = ["-m", spec.name] + argv[1:]
232
else:
...\autoreload.py Изменение данных
228
    spec = getattr(sys.modules["__main__"], "__spec__", None)
229
    argv = sys.argv
230
if spec:
231
    
argv
 = ["-m", spec.name] + argv[1:]
232
else:
233
    path_prefix = "." + os.pathsep
234
    if sys.path[0] == "" and not os.environ.get("PYTHONPATH", "").startswith(
...\autoreload.py Изменение данных
228
    spec = getattr(sys.modules["__main__"], "__spec__", None)
229
    argv = sys.argv
230
if spec:
231
    argv = ["-m", spec.name] + 
argv[1:]

                                                                                                                
                                                                                                        
                                                                                                        
232
else:
233
    path_prefix = "." + os.pathsep
234
    if sys.path[0] == "" and not os.environ.get("PYTHONPATH", "").startswith(
...\autoreload.py Изменение данных
228
    spec = getattr(sys.modules["__main__"], "__spec__", None)
229
    argv = sys.argv
230
if spec:
231
    argv = 
["-m", spec.name] + argv[1:]

                                                                                                                
                                                                                                        
                                                                                                        
232
else:
233
    path_prefix = "." + os.pathsep
234
    if sys.path[0] == "" and not os.environ.get("PYTHONPATH", "").startswith(
...\autoreload.py Изменение данных
228
    spec = getattr(sys.modules["__main__"], "__spec__", None)
229
    argv = sys.argv
230
if spec:
231
    
argv
 = ["-m", spec.name] + argv[1:]
232
else:
233
    path_prefix = "." + os.pathsep
234
    if sys.path[0] == "" and not os.environ.get("PYTHONPATH", "").startswith(
...\autoreload.py Изменение данных
240
    os._exit(0)
241
else:
242
    try:
243
...      os.execv(sys.executable, [sys.executable] + 
argv
)
244
    except OSError:
245
        # Mac OS X versions prior to 10.6 do not support execv in
246
        # a process that contains multiple threads.  Instead of
...\autoreload.py Изменение данных
240
    os._exit(0)
241
else:
242
    try:
243
        os.execv(sys.executable, 
[sys.executable] + argv
)
244
    except OSError:
245
        # Mac OS X versions prior to 10.6 do not support execv in
246
        # a process that contains multiple threads.  Instead of
...\autoreload.py Точка выхода
240
    os._exit(0)
241
else:
242
    try:
243
        
os.execv(sys.executable, [sys.executable] + argv)

                                                                                                                
                                                                                                        
                                                                                                        
244
    except OSError:
245
        # Mac OS X versions prior to 10.6 do not support execv in
246
        # a process that contains multiple threads.  Instead of
#AZhicfLMhU3ks0UVub464+8zA+o=
Идентификатор #310
Уязвимый файл
./tornado/autoreload.py : 243
Входной файл
./tornado/autoreload.py : 231
OWASP - A03 CWE-94
...\autoreload.py Точка входа
228
    spec = getattr(sys.modules["__main__"], "__spec__", None)
229
    argv = sys.argv
230
if spec:
231
    
argv
 = ["-m", spec.name] + argv[1:]
232
else:
233
    path_prefix = "." + os.pathsep
234
    if sys.path[0] == "" and not os.environ.get("PYTHONPATH", "").startswith(
...\autoreload.py Точка входа данных
228
    spec = getattr(sys.modules["__main__"], "__spec__", None)
229
    argv = sys.argv
230
if spec:
231
    
argv
 = ["-m", spec.name] + argv[1:]
232
else:
233
    path_prefix = "." + os.pathsep
234
    if sys.path[0] == "" and not os.environ.get("PYTHONPATH", "").startswith(
...\autoreload.py Изменение данных
228
    spec = getattr(sys.modules["__main__"], "__spec__", None)
229
    argv = sys.argv
230
if spec:
231
    argv = ["-m", spec.name] + 
argv[1:]

                                                                                                                
                                                                                                        
                                                                                                        
232
else:
233
    path_prefix = "." + os.pathsep
234
    if sys.path[0] == "" and not os.environ.get("PYTHONPATH", "").startswith(
...\autoreload.py Изменение данных
228
    spec = getattr(sys.modules["__main__"], "__spec__", None)
229
    argv = sys.argv
230
if spec:
231
    argv = 
["-m", spec.name] + argv[1:]

                                                                                                                
                                                                                                        
                                                                                                        
232
else:
233
    path_prefix = "." + os.pathsep
234
    if sys.path[0] == "" and not os.environ.get("PYTHONPATH", "").startswith(
...\autoreload.py Изменение данных
228
    spec = getattr(sys.modules["__main__"], "__spec__", None)
229
    argv = sys.argv
230
if spec:
231
    
argv
 = ["-m", spec.name] + argv[1:]
232
else:
233
    path_prefix = "." + os.pathsep
234
    if sys.path[0] == "" and not os.environ.get("PYTHONPATH", "").startswith(
...\autoreload.py Изменение данных
240
    os._exit(0)
241
else:
242
    try:
243
...      os.execv(sys.executable, [sys.executable] + 
argv
)
244
    except OSError:
245
        # Mac OS X versions prior to 10.6 do not support execv in
246
        # a process that contains multiple threads.  Instead of
...\autoreload.py Изменение данных
240
    os._exit(0)
241
else:
242
    try:
243
        os.execv(sys.executable, 
[sys.executable] + argv
)
244
    except OSError:
245
        # Mac OS X versions prior to 10.6 do not support execv in
246
        # a process that contains multiple threads.  Instead of
...\autoreload.py Точка выхода
240
    os._exit(0)
241
else:
242
    try:
243
        
os.execv(sys.executable, [sys.executable] + argv)

                                                                                                                
                                                                                                        
                                                                                                        
244
    except OSError:
245
        # Mac OS X versions prior to 10.6 do not support execv in
246
        # a process that contains multiple threads.  Instead of
Высокая
Удаленное выполнение кода
Описание уязвимости
Уязвимый код 256  os.spawnv( # type: ignore os.P_NOWAIT, sys.executable, [sys.executable] + argv )
#AxRp1AewCTJBrlPvPPV141LbkJ4=
Идентификатор #312
Уязвимый файл
./tornado/autoreload.py : 256
Входной файл
./tornado/autoreload.py : 229
OWASP - A03 CWE-94
...\autoreload.py Точка входа
226
    argv = _original_argv
227
else:
228
    spec = getattr(sys.modules["__main__"], "__spec__", None)
229
    argv = 
sys.argv

                                                                                                                
                                                                                                        
                                                                                                        
230
if spec:
231
    argv = ["-m", spec.name] + argv[1:]
232
else:
...\autoreload.py Точка входа данных
226
    argv = _original_argv
227
else:
228
    spec = getattr(sys.modules["__main__"], "__spec__", None)
229
    argv = 
sys.argv

                                                                                                                
                                                                                                        
                                                                                                        
230
if spec:
231
    argv = ["-m", spec.name] + argv[1:]
232
else:
...\autoreload.py Изменение данных
226
    argv = _original_argv
227
else:
228
    spec = getattr(sys.modules["__main__"], "__spec__", None)
229
    
argv
 = sys.argv
230
if spec:
231
    argv = ["-m", spec.name] + argv[1:]
232
else:
...\autoreload.py Изменение данных
228
    spec = getattr(sys.modules["__main__"], "__spec__", None)
229
    argv = sys.argv
230
if spec:
231
    
argv
 = ["-m", spec.name] + argv[1:]
232
else:
233
    path_prefix = "." + os.pathsep
234
    if sys.path[0] == "" and not os.environ.get("PYTHONPATH", "").startswith(
...\autoreload.py Изменение данных
228
    spec = getattr(sys.modules["__main__"], "__spec__", None)
229
    argv = sys.argv
230
if spec:
231
    argv = ["-m", spec.name] + 
argv[1:]

                                                                                                                
                                                                                                        
                                                                                                        
232
else:
233
    path_prefix = "." + os.pathsep
234
    if sys.path[0] == "" and not os.environ.get("PYTHONPATH", "").startswith(
...\autoreload.py Изменение данных
228
    spec = getattr(sys.modules["__main__"], "__spec__", None)
229
    argv = sys.argv
230
if spec:
231
    argv = 
["-m", spec.name] + argv[1:]

                                                                                                                
                                                                                                        
                                                                                                        
232
else:
233
    path_prefix = "." + os.pathsep
234
    if sys.path[0] == "" and not os.environ.get("PYTHONPATH", "").startswith(
...\autoreload.py Изменение данных
228
    spec = getattr(sys.modules["__main__"], "__spec__", None)
229
    argv = sys.argv
230
if spec:
231
    
argv
 = ["-m", spec.name] + argv[1:]
232
else:
233
    path_prefix = "." + os.pathsep
234
    if sys.path[0] == "" and not os.environ.get("PYTHONPATH", "").startswith(
...\autoreload.py Изменение данных
254
# appear to be consistent, so we can't easily check for
255
# this error specifically.
256
os.spawnv(  # type: ignore
257
...  os.P_NOWAIT, sys.executable, [sys.executable] + 
argv

                                                                                                                
                                                                                                        
                                                                                                        
258
)
259
# At this point the IOLoop has been closed and finally
260
# blocks will experience errors if we allow the stack to
...\autoreload.py Изменение данных
254
# appear to be consistent, so we can't easily check for
255
# this error specifically.
256
os.spawnv(  # type: ignore
257
    os.P_NOWAIT, sys.executable, 
[sys.executable] + argv

                                                                                                                
                                                                                                        
                                                                                                        
258
)
259
# At this point the IOLoop has been closed and finally
260
# blocks will experience errors if we allow the stack to
...\autoreload.py Точка выхода
253
# Unfortunately the errno returned in this case does not
254
# appear to be consistent, so we can't easily check for
255
# this error specifically.
256

                                                                                                                
                                                                                                        
                                                                                                            
                                                                                                                
                                                                                                                    
os.spawnv(  # type: ignore

                                                                                                                
                                                                                                        
                                                                                                        
257
    os.P_NOWAIT, sys.executable, [sys.executable] + argv
258
)
259
# At this point the IOLoop has been closed and finally
#/YBNXoNIEJm3A+Hima2c9K++HUY=
Идентификатор #315
Уязвимый файл
./tornado/autoreload.py : 256
Входной файл
./tornado/autoreload.py : 231
OWASP - A03 CWE-94
...\autoreload.py Точка входа
228
    spec = getattr(sys.modules["__main__"], "__spec__", None)
229
    argv = sys.argv
230
if spec:
231
    
argv
 = ["-m", spec.name] + argv[1:]
232
else:
233
    path_prefix = "." + os.pathsep
234
    if sys.path[0] == "" and not os.environ.get("PYTHONPATH", "").startswith(
...\autoreload.py Точка входа данных
228
    spec = getattr(sys.modules["__main__"], "__spec__", None)
229
    argv = sys.argv
230
if spec:
231
    
argv
 = ["-m", spec.name] + argv[1:]
232
else:
233
    path_prefix = "." + os.pathsep
234
    if sys.path[0] == "" and not os.environ.get("PYTHONPATH", "").startswith(
...\autoreload.py Изменение данных
228
    spec = getattr(sys.modules["__main__"], "__spec__", None)
229
    argv = sys.argv
230
if spec:
231
    argv = ["-m", spec.name] + 
argv[1:]

                                                                                                                
                                                                                                        
                                                                                                        
232
else:
233
    path_prefix = "." + os.pathsep
234
    if sys.path[0] == "" and not os.environ.get("PYTHONPATH", "").startswith(
...\autoreload.py Изменение данных
228
    spec = getattr(sys.modules["__main__"], "__spec__", None)
229
    argv = sys.argv
230
if spec:
231
    argv = 
["-m", spec.name] + argv[1:]

                                                                                                                
                                                                                                        
                                                                                                        
232
else:
233
    path_prefix = "." + os.pathsep
234
    if sys.path[0] == "" and not os.environ.get("PYTHONPATH", "").startswith(
...\autoreload.py Изменение данных
228
    spec = getattr(sys.modules["__main__"], "__spec__", None)
229
    argv = sys.argv
230
if spec:
231
    
argv
 = ["-m", spec.name] + argv[1:]
232
else:
233
    path_prefix = "." + os.pathsep
234
    if sys.path[0] == "" and not os.environ.get("PYTHONPATH", "").startswith(
...\autoreload.py Изменение данных
254
# appear to be consistent, so we can't easily check for
255
# this error specifically.
256
os.spawnv(  # type: ignore
257
...  os.P_NOWAIT, sys.executable, [sys.executable] + 
argv

                                                                                                                
                                                                                                        
                                                                                                        
258
)
259
# At this point the IOLoop has been closed and finally
260
# blocks will experience errors if we allow the stack to
...\autoreload.py Изменение данных
254
# appear to be consistent, so we can't easily check for
255
# this error specifically.
256
os.spawnv(  # type: ignore
257
    os.P_NOWAIT, sys.executable, 
[sys.executable] + argv

                                                                                                                
                                                                                                        
                                                                                                        
258
)
259
# At this point the IOLoop has been closed and finally
260
# blocks will experience errors if we allow the stack to
...\autoreload.py Точка выхода
253
# Unfortunately the errno returned in this case does not
254
# appear to be consistent, so we can't easily check for
255
# this error specifically.
256

                                                                                                                
                                                                                                        
                                                                                                            
                                                                                                                
                                                                                                                    
os.spawnv(  # type: ignore

                                                                                                                
                                                                                                        
                                                                                                        
257
    os.P_NOWAIT, sys.executable, [sys.executable] + argv
258
)
259
# At this point the IOLoop has been closed and finally
Высокая
Удаленное выполнение кода
Описание уязвимости
Уязвимый код 239  subprocess.Popen([sys.executable] + argv)
#Dyk54UJ8ugHO29IVXSvBVZl1LKo=
Идентификатор #318
Уязвимый файл
./tornado/autoreload.py : 239
Входной файл
./tornado/autoreload.py : 229
OWASP - A03 CWE-94
...\autoreload.py Точка входа
226
    argv = _original_argv
227
else:
228
    spec = getattr(sys.modules["__main__"], "__spec__", None)
229
    argv = 
sys.argv

                                                                                                                
                                                                                                        
                                                                                                        
230
if spec:
231
    argv = ["-m", spec.name] + argv[1:]
232
else:
...\autoreload.py Точка входа данных
226
    argv = _original_argv
227
else:
228
    spec = getattr(sys.modules["__main__"], "__spec__", None)
229
    argv = 
sys.argv

                                                                                                                
                                                                                                        
                                                                                                        
230
if spec:
231
    argv = ["-m", spec.name] + argv[1:]
232
else:
...\autoreload.py Изменение данных
226
    argv = _original_argv
227
else:
228
    spec = getattr(sys.modules["__main__"], "__spec__", None)
229
    
argv
 = sys.argv
230
if spec:
231
    argv = ["-m", spec.name] + argv[1:]
232
else:
...\autoreload.py Изменение данных
228
    spec = getattr(sys.modules["__main__"], "__spec__", None)
229
    argv = sys.argv
230
if spec:
231
    
argv
 = ["-m", spec.name] + argv[1:]
232
else:
233
    path_prefix = "." + os.pathsep
234
    if sys.path[0] == "" and not os.environ.get("PYTHONPATH", "").startswith(
...\autoreload.py Изменение данных
228
    spec = getattr(sys.modules["__main__"], "__spec__", None)
229
    argv = sys.argv
230
if spec:
231
    argv = ["-m", spec.name] + 
argv[1:]

                                                                                                                
                                                                                                        
                                                                                                        
232
else:
233
    path_prefix = "." + os.pathsep
234
    if sys.path[0] == "" and not os.environ.get("PYTHONPATH", "").startswith(
...\autoreload.py Изменение данных
228
    spec = getattr(sys.modules["__main__"], "__spec__", None)
229
    argv = sys.argv
230
if spec:
231
    argv = 
["-m", spec.name] + argv[1:]

                                                                                                                
                                                                                                        
                                                                                                        
232
else:
233
    path_prefix = "." + os.pathsep
234
    if sys.path[0] == "" and not os.environ.get("PYTHONPATH", "").startswith(
...\autoreload.py Изменение данных
228
    spec = getattr(sys.modules["__main__"], "__spec__", None)
229
    argv = sys.argv
230
if spec:
231
    
argv
 = ["-m", spec.name] + argv[1:]
232
else:
233
    path_prefix = "." + os.pathsep
234
    if sys.path[0] == "" and not os.environ.get("PYTHONPATH", "").startswith(
...\autoreload.py Изменение данных
236
    ):
237
        os.environ["PYTHONPATH"] = path_prefix + os.environ.get("PYTHONPATH", "")
238
if not _has_execv:
239
    subprocess.Popen([sys.executable] + 
argv
)
240
    os._exit(0)
241
else:
242
    try:
...\autoreload.py Изменение данных
236
    ):
237
        os.environ["PYTHONPATH"] = path_prefix + os.environ.get("PYTHONPATH", "")
238
if not _has_execv:
239
    subprocess.Popen(
[sys.executable] + argv
)
240
    os._exit(0)
241
else:
242
    try:
...\autoreload.py Точка выхода
236
    ):
237
        os.environ["PYTHONPATH"] = path_prefix + os.environ.get("PYTHONPATH", "")
238
if not _has_execv:
239
    
subprocess.Popen([sys.executable] + argv)

                                                                                                                
                                                                                                        
                                                                                                        
240
    os._exit(0)
241
else:
242
    try:
#9HpksmDf8K1ZWLPAM/XXdz71iSA=
Идентификатор #321
Уязвимый файл
./tornado/autoreload.py : 239
Входной файл
./tornado/autoreload.py : 231
OWASP - A03 CWE-94
...\autoreload.py Точка входа
228
    spec = getattr(sys.modules["__main__"], "__spec__", None)
229
    argv = sys.argv
230
if spec:
231
    
argv
 = ["-m", spec.name] + argv[1:]
232
else:
233
    path_prefix = "." + os.pathsep
234
    if sys.path[0] == "" and not os.environ.get("PYTHONPATH", "").startswith(
...\autoreload.py Точка входа данных
228
    spec = getattr(sys.modules["__main__"], "__spec__", None)
229
    argv = sys.argv
230
if spec:
231
    
argv
 = ["-m", spec.name] + argv[1:]
232
else:
233
    path_prefix = "." + os.pathsep
234
    if sys.path[0] == "" and not os.environ.get("PYTHONPATH", "").startswith(
...\autoreload.py Изменение данных
228
    spec = getattr(sys.modules["__main__"], "__spec__", None)
229
    argv = sys.argv
230
if spec:
231
    argv = ["-m", spec.name] + 
argv[1:]

                                                                                                                
                                                                                                        
                                                                                                        
232
else:
233
    path_prefix = "." + os.pathsep
234
    if sys.path[0] == "" and not os.environ.get("PYTHONPATH", "").startswith(
...\autoreload.py Изменение данных
228
    spec = getattr(sys.modules["__main__"], "__spec__", None)
229
    argv = sys.argv
230
if spec:
231
    argv = 
["-m", spec.name] + argv[1:]

                                                                                                                
                                                                                                        
                                                                                                        
232
else:
233
    path_prefix = "." + os.pathsep
234
    if sys.path[0] == "" and not os.environ.get("PYTHONPATH", "").startswith(
...\autoreload.py Изменение данных
228
    spec = getattr(sys.modules["__main__"], "__spec__", None)
229
    argv = sys.argv
230
if spec:
231
    
argv
 = ["-m", spec.name] + argv[1:]
232
else:
233
    path_prefix = "." + os.pathsep
234
    if sys.path[0] == "" and not os.environ.get("PYTHONPATH", "").startswith(
...\autoreload.py Изменение данных
236
    ):
237
        os.environ["PYTHONPATH"] = path_prefix + os.environ.get("PYTHONPATH", "")
238
if not _has_execv:
239
    subprocess.Popen([sys.executable] + 
argv
)
240
    os._exit(0)
241
else:
242
    try:
...\autoreload.py Изменение данных
236
    ):
237
        os.environ["PYTHONPATH"] = path_prefix + os.environ.get("PYTHONPATH", "")
238
if not _has_execv:
239
    subprocess.Popen(
[sys.executable] + argv
)
240
    os._exit(0)
241
else:
242
    try:
...\autoreload.py Точка выхода
236
    ):
237
        os.environ["PYTHONPATH"] = path_prefix + os.environ.get("PYTHONPATH", "")
238
if not _has_execv:
239
    
subprocess.Popen([sys.executable] + argv)

                                                                                                                
                                                                                                        
                                                                                                        
240
    os._exit(0)
241
else:
242
    try:
Средняя
Открытое перенаправление
Описание уязвимости
Уязвимый код 92  self.redirect(self.get_argument("next", "/"))
#fU2onH3Ou5ENxYxpW2Vqar5xCWc=
Идентификатор #457
Уязвимый файл
./demos/facebook/facebook.py : 92
Входной файл
./demos/facebook/facebook.py : 92
OWASP - A01 CWE-601
...\facebook.py Точка входа
89
        code=self.get_argument("code"),
90
    )
91
    self.set_secure_cookie("fbdemo_user", tornado.escape.json_encode(user))
92
    self.redirect(
self.get_argument
("next", "/"))
93
    return
94
self.authorize_redirect(
95
    redirect_uri=my_url,
...\facebook.py Точка входа данных
89
        code=self.get_argument("code"),
90
    )
91
    self.set_secure_cookie("fbdemo_user", tornado.escape.json_encode(user))
92
    self.redirect(
self.get_argument
("next", "/"))
93
    return
94
self.authorize_redirect(
95
    redirect_uri=my_url,
...\facebook.py Изменение данных
89
        code=self.get_argument("code"),
90
    )
91
    self.set_secure_cookie("fbdemo_user", tornado.escape.json_encode(user))
92
    self.redirect(
self.get_argument("next", "/")
)
93
    return
94
self.authorize_redirect(
95
    redirect_uri=my_url,
...\facebook.py Точка выхода
89
        code=self.get_argument("code"),
90
    )
91
    self.set_secure_cookie("fbdemo_user", tornado.escape.json_encode(user))
92
    
self.redirect(self.get_argument("next", "/"))

                                                                                                                
                                                                                                        
                                                                                                        
93
    return
94
self.authorize_redirect(
95
    redirect_uri=my_url,
Средняя
Открытое перенаправление
Описание уязвимости
Уязвимый код 104  self.redirect(self.get_argument("next", "/"))
#a9nnfj4I7mFVJyepgrkP9DBUnCo=
Идентификатор #460
Уязвимый файл
./demos/facebook/facebook.py : 104
Входной файл
./demos/facebook/facebook.py : 104
OWASP - A01 CWE-601
...\facebook.py Точка входа
101
class AuthLogoutHandler(BaseHandler, tornado.auth.FacebookGraphMixin):
102
    def get(self):
103
        self.clear_cookie("fbdemo_user")
104
        self.redirect(
self.get_argument
("next", "/"))
107
class PostModule(tornado.web.UIModule):
108
    def render(self, post):
109
        return self.render_string("modules/post.html", post=post)
...\facebook.py Точка входа данных
101
class AuthLogoutHandler(BaseHandler, tornado.auth.FacebookGraphMixin):
102
    def get(self):
103
        self.clear_cookie("fbdemo_user")
104
        self.redirect(
self.get_argument
("next", "/"))
107
class PostModule(tornado.web.UIModule):
108
    def render(self, post):
109
        return self.render_string("modules/post.html", post=post)
...\facebook.py Изменение данных
101
class AuthLogoutHandler(BaseHandler, tornado.auth.FacebookGraphMixin):
102
    def get(self):
103
        self.clear_cookie("fbdemo_user")
104
        self.redirect(
self.get_argument("next", "/")
)
107
class PostModule(tornado.web.UIModule):
108
    def render(self, post):
109
        return self.render_string("modules/post.html", post=post)
...\facebook.py Точка выхода
101
class AuthLogoutHandler(BaseHandler, tornado.auth.FacebookGraphMixin):
102
    def get(self):
103
        self.clear_cookie("fbdemo_user")
104
        
self.redirect(self.get_argument("next", "/"))

                                                                                                                
                                                                                                        
                                                                                                        
107
class PostModule(tornado.web.UIModule):
108
    def render(self, post):
109
        return self.render_string("modules/post.html", post=post)
Средняя
Открытое перенаправление
Описание уязвимости
Уязвимый код 79  self.redirect(self.get_argument("next", "/"))
#JDn/AzpsrM1OgDpPqIysaUV0qZA=
Идентификатор #479
Уязвимый файл
./demos/twitter/twitterdemo.py : 79
Входной файл
./demos/twitter/twitterdemo.py : 79
OWASP - A01 CWE-601
...\twitterdemo.py Точка входа
76
            user = yield self.get_authenticated_user()
77
            del user["description"]
78
            self.set_secure_cookie(self.COOKIE_NAME, json_encode(user))
79
            self.redirect(
self.get_argument
("next", "/"))
80
        else:
81
            yield self.authorize_redirect(callback_uri=self.request.full_url())
84
class LogoutHandler(BaseHandler):
...\twitterdemo.py Точка входа данных
76
            user = yield self.get_authenticated_user()
77
            del user["description"]
78
            self.set_secure_cookie(self.COOKIE_NAME, json_encode(user))
79
            self.redirect(
self.get_argument
("next", "/"))
80
        else:
81
            yield self.authorize_redirect(callback_uri=self.request.full_url())
84
class LogoutHandler(BaseHandler):
...\twitterdemo.py Изменение данных
76
            user = yield self.get_authenticated_user()
77
            del user["description"]
78
            self.set_secure_cookie(self.COOKIE_NAME, json_encode(user))
79
            self.redirect(
self.get_argument("next", "/")
)
80
        else:
81
            yield self.authorize_redirect(callback_uri=self.request.full_url())
84
class LogoutHandler(BaseHandler):
...\twitterdemo.py Точка выхода
76
            user = yield self.get_authenticated_user()
77
            del user["description"]
78
            self.set_secure_cookie(self.COOKIE_NAME, json_encode(user))
79
            
self.redirect(self.get_argument("next", "/"))

                                                                                                                
                                                                                                        
                                                                                                        
80
        else:
81
            yield self.authorize_redirect(callback_uri=self.request.full_url())
84
class LogoutHandler(BaseHandler):
Средняя
Открытое перенаправление
Описание уязвимости
Уязвимый код 226  self.redirect("/entry/" + slug)
#/DXNpfosSdXEKLQjTGhjhz/aqjg=
Идентификатор #489
Уязвимый файл
./demos/blog/blog.py : 226
Входной файл
./demos/blog/blog.py : 185
OWASP - A01 CWE-601
...\blog.py Точка входа
181
    self.render("compose.html", entry=entry)
183
@tornado.web.authenticated
184
async def post(self):
185
    id = 
self.get_argument
("id", None)
186
    title = self.get_argument("title")
187
    text = self.get_argument("markdown")
188
    html = markdown.markdown(text)
...\blog.py Точка входа данных
181
    self.render("compose.html", entry=entry)
183
@tornado.web.authenticated
184
async def post(self):
185
    id = 
self.get_argument
("id", None)
186
    title = self.get_argument("title")
187
    text = self.get_argument("markdown")
188
    html = markdown.markdown(text)
...\blog.py Изменение данных
181
    self.render("compose.html", entry=entry)
183
@tornado.web.authenticated
184
async def post(self):
185
    id = 
self.get_argument("id", None)

                                                                                                                
                                                                                                        
                                                                                                        
186
    title = self.get_argument("title")
187
    text = self.get_argument("markdown")
188
    html = markdown.markdown(text)
...\blog.py Изменение данных
181
    self.render("compose.html", entry=entry)
183
@tornado.web.authenticated
184
async def post(self):
185
    
id
 = self.get_argument("id", None)
186
    title = self.get_argument("title")
187
    text = self.get_argument("markdown")
188
    html = markdown.markdown(text)
...\blog.py Изменение данных
189
if id:
190
    try:
191
        entry = await self.queryone(
192
            "SELECT * FROM entries WHERE 
id
 = %s", int(id)
193
        )
194
    except NoResultError:
195
        raise tornado.web.HTTPError(404)
...\blog.py Изменение данных
189
if id:
190
    try:
191
        entry = await self.queryone(
192
...           "SELECT * FROM entries WHERE id = %s", 
int(id)

                                                                                                                
                                                                                                        
                                                                                                        
193
        )
194
    except NoResultError:
195
        raise tornado.web.HTTPError(404)
...\blog.py Изменение данных
188
html = markdown.markdown(text)
189
if id:
190
    try:
191

                                                                                                                
                                                                                                        
                                                                                                            
                                                                                                                
                                                                                                                    
        entry = await self.queryone(

                                                                                                                
                                                                                                        
                                                                                                        
192
            "SELECT * FROM entries WHERE id = %s", int(id)
193
        )
194
    except NoResultError:
...\blog.py Изменение данных
188
html = markdown.markdown(text)
189
if id:
190
    try:
191

                                                                                                                
                                                                                                        
                                                                                                            
                                                                                                                
                                                                                                                    
        entry = await self.queryone(

                                                                                                                
                                                                                                        
                                                                                                        
192
            "SELECT * FROM entries WHERE id = %s", int(id)
193
        )
194
    except NoResultError:
...\blog.py Изменение данных
188
html = markdown.markdown(text)
189
if id:
190
    try:
191
        
entry
 = await self.queryone(
192
            "SELECT * FROM entries WHERE id = %s", int(id)
193
        )
194
    except NoResultError:
...\blog.py Изменение данных
193
    )
194
except NoResultError:
195
    raise tornado.web.HTTPError(404)
196
slug = 
entry.slug

                                                                                                                
                                                                                                        
                                                                                                        
197
await self.execute(
198
    "UPDATE entries SET title = %s, markdown = %s, html = %s "
199
    "WHERE id = %s",
...\blog.py Изменение данных
193
    )
194
except NoResultError:
195
    raise tornado.web.HTTPError(404)
196

                                                                                                                
                                                                                                        
                                                                                                            
                                                                                                                
                                                                                                                    
slug
 = entry.slug
197
await self.execute(
198
    "UPDATE entries SET title = %s, markdown = %s, html = %s "
199
    "WHERE id = %s",
...\blog.py Изменение данных
205
else:
206
    slug = unicodedata.normalize("NFKD", title)
207
    slug = re.sub(r"[^\w]+", " ", slug)
208
    slug = "-".join(
slug.lower().strip().split
())
209
    slug = slug.encode("ascii", "ignore").decode("ascii")
210
    if not slug:
211
        slug = "entry"
...\blog.py Изменение данных
205
else:
206
    slug = unicodedata.normalize("NFKD", title)
207
    slug = re.sub(r"[^\w]+", " ", slug)
208
    slug = "-".join(
slug.lower().strip().split()
)
209
    slug = slug.encode("ascii", "ignore").decode("ascii")
210
    if not slug:
211
        slug = "entry"
...\blog.py Изменение данных
205
else:
206
    slug = unicodedata.normalize("NFKD", title)
207
    slug = re.sub(r"[^\w]+", " ", slug)
208
    slug = "
-".join(slug.lower().strip().split())

                                                                                                                
                                                                                                        
                                                                                                        
209
    slug = slug.encode("ascii", "ignore").decode("ascii")
210
    if not slug:
211
        slug = "entry"
...\blog.py Изменение данных
205
else:
206
    slug = unicodedata.normalize("NFKD", title)
207
    slug = re.sub(r"[^\w]+", " ", slug)
208
    
slug
 = "-".join(slug.lower().strip().split())
209
    slug = slug.encode("ascii", "ignore").decode("ascii")
210
    if not slug:
211
        slug = "entry"
...\blog.py Изменение данных
206
slug = unicodedata.normalize("NFKD", title)
207
slug = re.sub(r"[^\w]+", " ", slug)
208
slug = "-".join(slug.lower().strip().split())
209
slug = 
slug.encode("ascii", "ignore").decode
("ascii")
210
if not slug:
211
    slug = "entry"
212
while True:
...\blog.py Изменение данных
206
slug = unicodedata.normalize("NFKD", title)
207
slug = re.sub(r"[^\w]+", " ", slug)
208
slug = "-".join(slug.lower().strip().split())
209
slug = 
slug.encode("ascii", "ignore").decode("ascii")

                                                                                                                
                                                                                                        
                                                                                                        
210
if not slug:
211
    slug = "entry"
212
while True:
...\blog.py Изменение данных
206
slug = unicodedata.normalize("NFKD", title)
207
slug = re.sub(r"[^\w]+", " ", slug)
208
slug = "-".join(slug.lower().strip().split())
209

                                                                                                                
                                                                                                        
                                                                                                            
                                                                                                                
                                                                                                                    
slug
 = slug.encode("ascii", "ignore").decode("ascii")
210
if not slug:
211
    slug = "entry"
212
while True:
...\blog.py Изменение данных
213
    e = await self.query("SELECT * FROM entries WHERE slug = %s", slug)
214
    if not e:
215
        break
216
    
slug
 += "-2"
217
await self.execute(
218
    "INSERT INTO entries (author_id,title,slug,markdown,html,published,updated)"
219
    "VALUES (%s,%s,%s,%s,%s,CURRENT_TIMESTAMP,CURRENT_TIMESTAMP)",
...\blog.py Изменение данных
213
    e = await self.query("SELECT * FROM entries WHERE slug = %s", slug)
214
    if not e:
215
        break
216
    
slug += "-2"

                                                                                                                
                                                                                                        
                                                                                                        
217
await self.execute(
218
    "INSERT INTO entries (author_id,title,slug,markdown,html,published,updated)"
219
    "VALUES (%s,%s,%s,%s,%s,CURRENT_TIMESTAMP,CURRENT_TIMESTAMP)",
...\blog.py Изменение данных
223
                text,
224
                html,
225
            )
226
        self.redirect("/entry/" + 
slug
)
229
class AuthCreateHandler(BaseHandler):
230
    def get(self):
231
        self.render("create_author.html")
...\blog.py Изменение данных
223
                text,
224
                html,
225
            )
226
        self.redirect(
"/entry/" + slug
)
229
class AuthCreateHandler(BaseHandler):
230
    def get(self):
231
        self.render("create_author.html")
...\blog.py Точка выхода
223
                text,
224
                html,
225
            )
226
        
self.redirect("/entry/" + slug)

                                                                                                                
                                                                                                        
                                                                                                        
229
class AuthCreateHandler(BaseHandler):
230
    def get(self):
231
        self.render("create_author.html")
#eohFe2t3fhrBm1z6a/9CqlwfSBo=
Идентификатор #490
Уязвимый файл
./demos/blog/blog.py : 226
Входной файл
./demos/blog/blog.py : 186
OWASP - A01 CWE-601
...\blog.py Точка входа
183
@tornado.web.authenticated
184
async def post(self):
185
    id = self.get_argument("id", None)
186
    title = 
self.get_argument
("title")
187
    text = self.get_argument("markdown")
188
    html = markdown.markdown(text)
189
    if id:
...\blog.py Точка входа данных
183
@tornado.web.authenticated
184
async def post(self):
185
    id = self.get_argument("id", None)
186
    title = 
self.get_argument
("title")
187
    text = self.get_argument("markdown")
188
    html = markdown.markdown(text)
189
    if id:
...\blog.py Изменение данных
183
@tornado.web.authenticated
184
async def post(self):
185
    id = self.get_argument("id", None)
186
    title = 
self.get_argument("title")

                                                                                                                
                                                                                                        
                                                                                                        
187
    text = self.get_argument("markdown")
188
    html = markdown.markdown(text)
189
    if id:
...\blog.py Изменение данных
183
@tornado.web.authenticated
184
async def post(self):
185
    id = self.get_argument("id", None)
186
    
title
 = self.get_argument("title")
187
    text = self.get_argument("markdown")
188
    html = markdown.markdown(text)
189
    if id:
...\blog.py Изменение данных
203
        int(id),
204
    )
205
else:
206
    slug = unicodedata.normalize("NFKD", 
title
)
207
    slug = re.sub(r"[^\w]+", " ", slug)
208
    slug = "-".join(slug.lower().strip().split())
209
    slug = slug.encode("ascii", "ignore").decode("ascii")
...\blog.py Изменение данных
203
        int(id),
204
    )
205
else:
206
    slug = 
unicodedata.normalize("NFKD", title)

                                                                                                                
                                                                                                        
                                                                                                        
207
    slug = re.sub(r"[^\w]+", " ", slug)
208
    slug = "-".join(slug.lower().strip().split())
209
    slug = slug.encode("ascii", "ignore").decode("ascii")
...\blog.py Изменение данных
203
        int(id),
204
    )
205
else:
206
    
slug
 = unicodedata.normalize("NFKD", title)
207
    slug = re.sub(r"[^\w]+", " ", slug)
208
    slug = "-".join(slug.lower().strip().split())
209
    slug = slug.encode("ascii", "ignore").decode("ascii")
...\blog.py Изменение данных
204
    )
205
else:
206
    slug = unicodedata.normalize("NFKD", title)
207
    
slug
 = re.sub(r"[^\w]+", " ", slug)
208
    slug = "-".join(slug.lower().strip().split())
209
    slug = slug.encode("ascii", "ignore").decode("ascii")
210
    if not slug:
...\blog.py Изменение данных
204
    )
205
else:
206
    slug = unicodedata.normalize("NFKD", title)
207
    slug = 
re.sub(r"[^\w]+", " ", slug)

                                                                                                                
                                                                                                        
                                                                                                        
208
    slug = "-".join(slug.lower().strip().split())
209
    slug = slug.encode("ascii", "ignore").decode("ascii")
210
    if not slug:
...\blog.py Изменение данных
204
    )
205
else:
206
    slug = unicodedata.normalize("NFKD", title)
207
    
slug
 = re.sub(r"[^\w]+", " ", slug)
208
    slug = "-".join(slug.lower().strip().split())
209
    slug = slug.encode("ascii", "ignore").decode("ascii")
210
    if not slug:
...\blog.py Изменение данных
205
else:
206
    slug = unicodedata.normalize("NFKD", title)
207
    slug = re.sub(r"[^\w]+", " ", slug)
208
    slug = "-".join(
slug.lower().strip().split
())
209
    slug = slug.encode("ascii", "ignore").decode("ascii")
210
    if not slug:
211
        slug = "entry"
...\blog.py Изменение данных
205
else:
206
    slug = unicodedata.normalize("NFKD", title)
207
    slug = re.sub(r"[^\w]+", " ", slug)
208
    slug = "-".join(
slug.lower().strip().split()
)
209
    slug = slug.encode("ascii", "ignore").decode("ascii")
210
    if not slug:
211
        slug = "entry"
...\blog.py Изменение данных
205
else:
206
    slug = unicodedata.normalize("NFKD", title)
207
    slug = re.sub(r"[^\w]+", " ", slug)
208
    slug = "
-".join(slug.lower().strip().split())

                                                                                                                
                                                                                                        
                                                                                                        
209
    slug = slug.encode("ascii", "ignore").decode("ascii")
210
    if not slug:
211
        slug = "entry"
...\blog.py Изменение данных
205
else:
206
    slug = unicodedata.normalize("NFKD", title)
207
    slug = re.sub(r"[^\w]+", " ", slug)
208
    
slug
 = "-".join(slug.lower().strip().split())
209
    slug = slug.encode("ascii", "ignore").decode("ascii")
210
    if not slug:
211
        slug = "entry"
...\blog.py Изменение данных
206
slug = unicodedata.normalize("NFKD", title)
207
slug = re.sub(r"[^\w]+", " ", slug)
208
slug = "-".join(slug.lower().strip().split())
209
slug = 
slug.encode("ascii", "ignore").decode
("ascii")
210
if not slug:
211
    slug = "entry"
212
while True:
...\blog.py Изменение данных
206
slug = unicodedata.normalize("NFKD", title)
207
slug = re.sub(r"[^\w]+", " ", slug)
208
slug = "-".join(slug.lower().strip().split())
209
slug = 
slug.encode("ascii", "ignore").decode("ascii")

                                                                                                                
                                                                                                        
                                                                                                        
210
if not slug:
211
    slug = "entry"
212
while True:
...\blog.py Изменение данных
206
slug = unicodedata.normalize("NFKD", title)
207
slug = re.sub(r"[^\w]+", " ", slug)
208
slug = "-".join(slug.lower().strip().split())
209

                                                                                                                
                                                                                                        
                                                                                                            
                                                                                                                
                                                                                                                    
slug
 = slug.encode("ascii", "ignore").decode("ascii")
210
if not slug:
211
    slug = "entry"
212
while True:
...\blog.py Изменение данных
213
    e = await self.query("SELECT * FROM entries WHERE slug = %s", slug)
214
    if not e:
215
        break
216
    
slug
 += "-2"
217
await self.execute(
218
    "INSERT INTO entries (author_id,title,slug,markdown,html,published,updated)"
219
    "VALUES (%s,%s,%s,%s,%s,CURRENT_TIMESTAMP,CURRENT_TIMESTAMP)",
...\blog.py Изменение данных
213
    e = await self.query("SELECT * FROM entries WHERE slug = %s", slug)
214
    if not e:
215
        break
216
    
slug += "-2"

                                                                                                                
                                                                                                        
                                                                                                        
217
await self.execute(
218
    "INSERT INTO entries (author_id,title,slug,markdown,html,published,updated)"
219
    "VALUES (%s,%s,%s,%s,%s,CURRENT_TIMESTAMP,CURRENT_TIMESTAMP)",
...\blog.py Изменение данных
223
                text,
224
                html,
225
            )
226
        self.redirect("/entry/" + 
slug
)
229
class AuthCreateHandler(BaseHandler):
230
    def get(self):
231
        self.render("create_author.html")
...\blog.py Изменение данных
223
                text,
224
                html,
225
            )
226
        self.redirect(
"/entry/" + slug
)
229
class AuthCreateHandler(BaseHandler):
230
    def get(self):
231
        self.render("create_author.html")
...\blog.py Точка выхода
223
                text,
224
                html,
225
            )
226
        
self.redirect("/entry/" + slug)

                                                                                                                
                                                                                                        
                                                                                                        
229
class AuthCreateHandler(BaseHandler):
230
    def get(self):
231
        self.render("create_author.html")
Средняя
Открытое перенаправление
Описание уязвимости
Уязвимый код 250  self.redirect(self.get_argument("next", "/"))
#mIhvkjcdysM+IVdIIjtZICzIJRw=
Идентификатор #491
Уязвимый файл
./demos/blog/blog.py : 250
Входной файл
./demos/blog/blog.py : 250
OWASP - A01 CWE-601
...\blog.py Точка входа
247
            tornado.escape.to_unicode(hashed_password),
248
        )
249
        self.set_secure_cookie("blogdemo_user", str(author.id))
250
        self.redirect(
self.get_argument
("next", "/"))
253
class AuthLoginHandler(BaseHandler):
254
    async def get(self):
255
        # If there are no authors, redirect to the account creation page.
...\blog.py Точка входа данных
247
            tornado.escape.to_unicode(hashed_password),
248
        )
249
        self.set_secure_cookie("blogdemo_user", str(author.id))
250
        self.redirect(
self.get_argument
("next", "/"))
253
class AuthLoginHandler(BaseHandler):
254
    async def get(self):
255
        # If there are no authors, redirect to the account creation page.
...\blog.py Изменение данных
247
            tornado.escape.to_unicode(hashed_password),
248
        )
249
        self.set_secure_cookie("blogdemo_user", str(author.id))
250
        self.redirect(
self.get_argument("next", "/")
)
253
class AuthLoginHandler(BaseHandler):
254
    async def get(self):
255
        # If there are no authors, redirect to the account creation page.
...\blog.py Точка выхода
247
            tornado.escape.to_unicode(hashed_password),
248
        )
249
        self.set_secure_cookie("blogdemo_user", str(author.id))
250
        
self.redirect(self.get_argument("next", "/"))

                                                                                                                
                                                                                                        
                                                                                                        
253
class AuthLoginHandler(BaseHandler):
254
    async def get(self):
255
        # If there are no authors, redirect to the account creation page.
Средняя
Открытое перенаправление
Описание уязвимости
Уязвимый код 278  self.redirect(self.get_argument("next", "/"))
#6VV3EEz5qWorz1NlRLcPbVeT4BU=
Идентификатор #492
Уязвимый файл
./demos/blog/blog.py : 278
Входной файл
./demos/blog/blog.py : 278
OWASP - A01 CWE-601
...\blog.py Точка входа
275
        hashed_password = tornado.escape.to_unicode(hashed_password)
276
        if hashed_password == author.hashed_password:
277
            self.set_secure_cookie("blogdemo_user", str(author.id))
278
            self.redirect(
self.get_argument
("next", "/"))
279
        else:
280
            self.render("login.html", error="incorrect password")
283
class AuthLogoutHandler(BaseHandler):
...\blog.py Точка входа данных
275
        hashed_password = tornado.escape.to_unicode(hashed_password)
276
        if hashed_password == author.hashed_password:
277
            self.set_secure_cookie("blogdemo_user", str(author.id))
278
            self.redirect(
self.get_argument
("next", "/"))
279
        else:
280
            self.render("login.html", error="incorrect password")
283
class AuthLogoutHandler(BaseHandler):
...\blog.py Изменение данных
275
        hashed_password = tornado.escape.to_unicode(hashed_password)
276
        if hashed_password == author.hashed_password:
277
            self.set_secure_cookie("blogdemo_user", str(author.id))
278
            self.redirect(
self.get_argument("next", "/")
)
279
        else:
280
            self.render("login.html", error="incorrect password")
283
class AuthLogoutHandler(BaseHandler):
...\blog.py Точка выхода
275
        hashed_password = tornado.escape.to_unicode(hashed_password)
276
        if hashed_password == author.hashed_password:
277
            self.set_secure_cookie("blogdemo_user", str(author.id))
278
            
self.redirect(self.get_argument("next", "/"))

                                                                                                                
                                                                                                        
                                                                                                        
279
        else:
280
            self.render("login.html", error="incorrect password")
283
class AuthLogoutHandler(BaseHandler):
Средняя
Открытое перенаправление
Описание уязвимости
Уязвимый код 286  self.redirect(self.get_argument("next", "/"))
#JDeDVZWa1fEZxo8TC8scqBkXaRk=
Идентификатор #494
Уязвимый файл
./demos/blog/blog.py : 286
Входной файл
./demos/blog/blog.py : 286
OWASP - A01 CWE-601
...\blog.py Точка входа
283
class AuthLogoutHandler(BaseHandler):
284
    def get(self):
285
        self.clear_cookie("blogdemo_user")
286
        self.redirect(
self.get_argument
("next", "/"))
289
class EntryModule(tornado.web.UIModule):
290
    def render(self, entry):
291
        return self.render_string("modules/entry.html", entry=entry)
...\blog.py Точка входа данных
283
class AuthLogoutHandler(BaseHandler):
284
    def get(self):
285
        self.clear_cookie("blogdemo_user")
286
        self.redirect(
self.get_argument
("next", "/"))
289
class EntryModule(tornado.web.UIModule):
290
    def render(self, entry):
291
        return self.render_string("modules/entry.html", entry=entry)
...\blog.py Изменение данных
283
class AuthLogoutHandler(BaseHandler):
284
    def get(self):
285
        self.clear_cookie("blogdemo_user")
286
        self.redirect(
self.get_argument("next", "/")
)
289
class EntryModule(tornado.web.UIModule):
290
    def render(self, entry):
291
        return self.render_string("modules/entry.html", entry=entry)
...\blog.py Точка выхода
283
class AuthLogoutHandler(BaseHandler):
284
    def get(self):
285
        self.clear_cookie("blogdemo_user")
286
        
self.redirect(self.get_argument("next", "/"))

                                                                                                                
                                                                                                        
                                                                                                        
289
class EntryModule(tornado.web.UIModule):
290
    def render(self, entry):
291
        return self.render_string("modules/entry.html", entry=entry)
Средняя
Открытое перенаправление
Описание уязвимости
Уязвимый код 78  self.redirect(self.get_argument("next"))
#SYXEKrFoNfmX57T1gTHSRZfauNg=
Идентификатор #505
Уязвимый файл
./demos/chat/chatdemo.py : 78
Входной файл
./demos/chat/chatdemo.py : 78
OWASP - A01 CWE-601
...\chatdemo.py Точка входа
75
    self.render_string("message.html", message=message)
76
)
77
if self.get_argument("next", None):
78
    self.redirect(
self.get_argument
("next"))
79
else:
80
    self.write(message)
81
global_message_buffer.add_message(message)
...\chatdemo.py Точка входа данных
75
    self.render_string("message.html", message=message)
76
)
77
if self.get_argument("next", None):
78
    self.redirect(
self.get_argument
("next"))
79
else:
80
    self.write(message)
81
global_message_buffer.add_message(message)
...\chatdemo.py Изменение данных
75
    self.render_string("message.html", message=message)
76
)
77
if self.get_argument("next", None):
78
    self.redirect(
self.get_argument("next")
)
79
else:
80
    self.write(message)
81
global_message_buffer.add_message(message)
...\chatdemo.py Точка выхода
75
    self.render_string("message.html", message=message)
76
)
77
if self.get_argument("next", None):
78
    
self.redirect(self.get_argument("next"))

                                                                                                                
                                                                                                        
                                                                                                        
79
else:
80
    self.write(message)
81
global_message_buffer.add_message(message)
Средняя
Открытое перенаправление
Описание уязвимости
Уязвимый код 61  self.redirect( self.get_argument("url"), status=int(self.get_argument("status", "302")) )
#7qUkvvIgoJCMrJBzYhundOpcUdA=
Идентификатор #543
Уязвимый файл
./tornado/test/httpclient_test.py : 61
Входной файл
./tornado/test/httpclient_test.py : 62
OWASP - A01 CWE-601
...\httpclient_test.py Точка входа
59
    def prepare(self):
60
        self.write("redirects can have bodies too")
61
        self.redirect(
62
            
self.get_argument
("url"), status=int(self.get_argument("status", "3...
63
        )
66
class RedirectWithoutLocationHandler(RequestHandler):
67
    def prepare(self):
...\httpclient_test.py Точка входа данных
59
    def prepare(self):
60
        self.write("redirects can have bodies too")
61
        self.redirect(
62
            
self.get_argument
("url"), status=int(self.get_argument("status", "3...
63
        )
66
class RedirectWithoutLocationHandler(RequestHandler):
67
    def prepare(self):
...\httpclient_test.py Изменение данных
59
    def prepare(self):
60
        self.write("redirects can have bodies too")
61
        self.redirect(
62
            
self.get_argument("url")
, status=int(self.get_argument("status", "302"))
63
        )
66
class RedirectWithoutLocationHandler(RequestHandler):
67
    def prepare(self):
...\httpclient_test.py Точка выхода
58
class RedirectHandler(RequestHandler):
59
    def prepare(self):
60
        self.write("redirects can have bodies too")
61

                                                                                                                
                                                                                                        
                                                                                                            
                                                                                                                
                                                                                                                    
        self.redirect(

                                                                                                                
                                                                                                        
                                                                                                        
62
            self.get_argument("url"), status=int(self.get_argument("status", "302"))
63
        )
66
class RedirectWithoutLocationHandler(RequestHandler):
#QxCqAhUQWyOkmCvUO02gIpnNGlg=
Идентификатор #546
Уязвимый файл
./tornado/test/httpclient_test.py : 61
Входной файл
./tornado/test/httpclient_test.py : 62
OWASP - A01 CWE-601
...\httpclient_test.py Точка входа
59
    def prepare(self):
60
        self.write("redirects can have bodies too")
61
        self.redirect(
62
            
self.get_argument
("url"), status=int(self.get_argument("status", "3...
63
        )
66
class RedirectWithoutLocationHandler(RequestHandler):
67
    def prepare(self):
...\httpclient_test.py Точка входа данных
59
    def prepare(self):
60
        self.write("redirects can have bodies too")
61
        self.redirect(
62
            
self.get_argument
("url"), status=int(self.get_argument("status", "3...
63
        )
66
class RedirectWithoutLocationHandler(RequestHandler):
67
    def prepare(self):
...\httpclient_test.py Изменение данных
59
    def prepare(self):
60
        self.write("redirects can have bodies too")
61
        self.redirect(
62
            self.get_argument("url"), status=int(
self.get_argument("status", "302")
)
63
        )
66
class RedirectWithoutLocationHandler(RequestHandler):
67
    def prepare(self):
...\httpclient_test.py Изменение данных
59
    def prepare(self):
60
        self.write("redirects can have bodies too")
61
        self.redirect(
62
            self.get_argument("url"), status=
int(self.get_argument("status", "302"))

                                                                                                                
                                                                                                        
                                                                                                        
63
        )
66
class RedirectWithoutLocationHandler(RequestHandler):
67
    def prepare(self):
...\httpclient_test.py Точка выхода
58
class RedirectHandler(RequestHandler):
59
    def prepare(self):
60
        self.write("redirects can have bodies too")
61

                                                                                                                
                                                                                                        
                                                                                                            
                                                                                                                
                                                                                                                    
        self.redirect(

                                                                                                                
                                                                                                        
                                                                                                        
62
            self.get_argument("url"), status=int(self.get_argument("status", "302"))
63
        )
66
class RedirectWithoutLocationHandler(RequestHandler):
Средняя
Открытое перенаправление
Описание уязвимости
Уязвимый код 564  self.redirect(url_concat(self.get_argument("redirect_uri"), dict(code=code)))
#zayPaWcHU0GMNZ+KvHbt4zH89iM=
Идентификатор #600
Уязвимый файл
./tornado/test/auth_test.py : 564
Входной файл
./tornado/test/auth_test.py : 564
OWASP - A01 CWE-601
...\auth_test.py Точка входа
561
    def get(self):
562
        # issue a fake auth code and redirect to redirect_uri
563
        code = "fake-authorization-code"
564
        self.redirect(url_concat(
self.get_argument
("redirect_uri"), dict(code=code)))
567
class GoogleOAuth2TokenHandler(RequestHandler):
568
    def post(self):
569
        assert self.get_argument("code") == "fake-authorization-code"
...\auth_test.py Точка входа данных
561
    def get(self):
562
        # issue a fake auth code and redirect to redirect_uri
563
        code = "fake-authorization-code"
564
        self.redirect(url_concat(
self.get_argument
("redirect_uri"), dict(code=code)))
567
class GoogleOAuth2TokenHandler(RequestHandler):
568
    def post(self):
569
        assert self.get_argument("code") == "fake-authorization-code"
...\auth_test.py Изменение данных
561
    def get(self):
562
        # issue a fake auth code and redirect to redirect_uri
563
        code = "fake-authorization-code"
564
        self.redirect(url_concat(
self.get_argument("redirect_uri")
, dict(code=code)))
567
class GoogleOAuth2TokenHandler(RequestHandler):
568
    def post(self):
569
        assert self.get_argument("code") == "fake-authorization-code"
...\auth_test.py Изменение данных
561
    def get(self):
562
        # issue a fake auth code and redirect to redirect_uri
563
        code = "fake-authorization-code"
564
        self.redirect(
url_concat(self.get_argument("redirect_uri"), dict(code=code))
)
567
class GoogleOAuth2TokenHandler(RequestHandler):
568
    def post(self):
569
        assert self.get_argument("code") == "fake-authorization-code"
...\auth_test.py Точка выхода
561
    def get(self):
562
        # issue a fake auth code and redirect to redirect_uri
563
        code = "fake-authorization-code"
564
        
self.redirect(url_concat(self.get_argument("redirect_uri"), dict(code=code)))

                                                                                                                
                                                                                                        
                                                                                                        
567
class GoogleOAuth2TokenHandler(RequestHandler):
568
    def post(self):
569
        assert self.get_argument("code") == "fake-authorization-code"
Средняя
Открытое перенаправление
Описание уязвимости
Уязвимый код 652  self.redirect("/", permanent=int(self.get_argument("permanent")))
#Y3zkLzwCKXgynP/i6bF4BVaD0bY=
Идентификатор #647
Уязвимый файл
./tornado/test/web_test.py : 652
Входной файл
./tornado/test/web_test.py : 652
OWASP - A01 CWE-601
...\web_test.py Точка входа
649
class RedirectHandler(RequestHandler):
650
    def get(self):
651
        if self.get_argument("permanent", None) is not None:
652
            self.redirect("/", permanent=int(
self.get_argument
("permanent")))
653
        elif self.get_argument("status", None) is not None:
654
            self.redirect("/", status=int(self.get_argument("status")))
655
        else:
...\web_test.py Точка входа данных
649
class RedirectHandler(RequestHandler):
650
    def get(self):
651
        if self.get_argument("permanent", None) is not None:
652
            self.redirect("/", permanent=int(
self.get_argument
("permanent")))
653
        elif self.get_argument("status", None) is not None:
654
            self.redirect("/", status=int(self.get_argument("status")))
655
        else:
...\web_test.py Изменение данных
649
class RedirectHandler(RequestHandler):
650
    def get(self):
651
        if self.get_argument("permanent", None) is not None:
652
            self.redirect("/", permanent=int(
self.get_argument("permanent")
))
653
        elif self.get_argument("status", None) is not None:
654
            self.redirect("/", status=int(self.get_argument("status")))
655
        else:
...\web_test.py Изменение данных
649
class RedirectHandler(RequestHandler):
650
    def get(self):
651
        if self.get_argument("permanent", None) is not None:
652
            self.redirect("/", permanent=
int(self.get_argument("permanent"))
)
653
        elif self.get_argument("status", None) is not None:
654
            self.redirect("/", status=int(self.get_argument("status")))
655
        else:
...\web_test.py Точка выхода
649
class RedirectHandler(RequestHandler):
650
    def get(self):
651
        if self.get_argument("permanent", None) is not None:
652
            
self.redirect("/", permanent=int(self.get_argument("permanent")))

                                                                                                                
                                                                                                        
                                                                                                        
653
        elif self.get_argument("status", None) is not None:
654
            self.redirect("/", status=int(self.get_argument("status")))
655
        else:
Средняя
Открытое перенаправление
Описание уязвимости
Уязвимый код 654  self.redirect("/", status=int(self.get_argument("status")))
#DFR970C/96OapfrvbaTcengOxQg=
Идентификатор #649
Уязвимый файл
./tornado/test/web_test.py : 654
Входной файл
./tornado/test/web_test.py : 654
OWASP - A01 CWE-601
...\web_test.py Точка входа
651
        if self.get_argument("permanent", None) is not None:
652
            self.redirect("/", permanent=int(self.get_argument("permanent")))
653
        elif self.get_argument("status", None) is not None:
654
            self.redirect("/", status=int(
self.get_argument
("status")))
655
        else:
656
            raise Exception("didn't get permanent or status arguments")
659
class EmptyFlushCallbackHandler(RequestHandler):
...\web_test.py Точка входа данных
651
        if self.get_argument("permanent", None) is not None:
652
            self.redirect("/", permanent=int(self.get_argument("permanent")))
653
        elif self.get_argument("status", None) is not None:
654
            self.redirect("/", status=int(
self.get_argument
("status")))
655
        else:
656
            raise Exception("didn't get permanent or status arguments")
659
class EmptyFlushCallbackHandler(RequestHandler):
...\web_test.py Изменение данных
651
        if self.get_argument("permanent", None) is not None:
652
            self.redirect("/", permanent=int(self.get_argument("permanent")))
653
        elif self.get_argument("status", None) is not None:
654
            self.redirect("/", status=int(
self.get_argument("status")
))
655
        else:
656
            raise Exception("didn't get permanent or status arguments")
659
class EmptyFlushCallbackHandler(RequestHandler):
...\web_test.py Изменение данных
651
        if self.get_argument("permanent", None) is not None:
652
            self.redirect("/", permanent=int(self.get_argument("permanent")))
653
        elif self.get_argument("status", None) is not None:
654
            self.redirect("/", status=
int(self.get_argument("status"))
)
655
        else:
656
            raise Exception("didn't get permanent or status arguments")
659
class EmptyFlushCallbackHandler(RequestHandler):
...\web_test.py Точка выхода
651
        if self.get_argument("permanent", None) is not None:
652
            self.redirect("/", permanent=int(self.get_argument("permanent")))
653
        elif self.get_argument("status", None) is not None:
654
            
self.redirect("/", status=int(self.get_argument("status")))

                                                                                                                
                                                                                                        
                                                                                                        
655
        else:
656
            raise Exception("didn't get permanent or status arguments")
659
class EmptyFlushCallbackHandler(RequestHandler):
Средняя
Открытое перенаправление
Описание уязвимости
Уязвимый код 22  self.redirect(path, status=int(self.get_argument('status', '302')))
#U9Zx/VGEL+AsMAMwEYU9F0xExZ0=
Идентификатор #660
Уязвимый файл
./maint/test/redbot/red_test.py : 22
Входной файл
./maint/test/redbot/red_test.py : 22
OWASP - A01 CWE-601
...\red_test.py Точка входа
17
        self.write("Hello world")
20
class RedirectHandler(RequestHandler):
21
    def get(self, path):
22
        self.redirect(path, status=int(
self.get_argument
('status', '302')))
25
class PostHandler(RequestHandler):
26
    def post(self):
27
        assert self.get_argument('foo') == 'bar'
...\red_test.py Точка входа данных
17
        self.write("Hello world")
20
class RedirectHandler(RequestHandler):
21
    def get(self, path):
22
        self.redirect(path, status=int(
self.get_argument
('status', '302')))
25
class PostHandler(RequestHandler):
26
    def post(self):
27
        assert self.get_argument('foo') == 'bar'
...\red_test.py Изменение данных
17
        self.write("Hello world")
20
class RedirectHandler(RequestHandler):
21
    def get(self, path):
22
        self.redirect(path, status=int(
self.get_argument('status', '302')
))
25
class PostHandler(RequestHandler):
26
    def post(self):
27
        assert self.get_argument('foo') == 'bar'
...\red_test.py Изменение данных
17
        self.write("Hello world")
20
class RedirectHandler(RequestHandler):
21
    def get(self, path):
22
        self.redirect(path, status=
int(self.get_argument('status', '302'))
)
25
class PostHandler(RequestHandler):
26
    def post(self):
27
        assert self.get_argument('foo') == 'bar'
...\red_test.py Точка выхода
17
        self.write("Hello world")
20
class RedirectHandler(RequestHandler):
21
    def get(self, path):
22
        
self.redirect(path, status=int(self.get_argument('status', '302')))

                                                                                                                
                                                                                                        
                                                                                                        
25
class PostHandler(RequestHandler):
26
    def post(self):
27
        assert self.get_argument('foo') == 'bar'
Потенциальная
Использование assert выражения
Описание уязвимости
#kNEeK5uphjVOgs9+mVQIqwgvJag=
Идентификатор #306
Совпадение 224  assert : 224
Уязвимый файл
./tornado/autoreload.py
CWE-617
#I7TUkSxpuIoADbFcmX3StrnB+C8=
Идентификатор #313
Совпадение 155  assert : 155
Уязвимый файл
./tornado/concurrent.py
CWE-617
#Ln4bfK7b3To+bCWG3xoDSSxICec=
Идентификатор #316
Совпадение 269  assert : 269
Уязвимый файл
./tornado/curl_httpclient.py
CWE-617
#46tlzKVXxb/2h4zoz8PEfmqqJgE=
Идентификатор #317
Совпадение 111  assert : 111
Уязвимый файл
./tornado/auth.py
CWE-617
#DFyCsoiybap7cNF0LTUIwwYugPw=
Идентификатор #319
Совпадение 271  assert : 271
Уязвимый файл
./tornado/curl_httpclient.py
CWE-617
#iJOpPJX1u1KqnJVEWNziQ3KO/xE=
Идентификатор #320
Совпадение 327  assert : 327
Уязвимый файл
./tornado/auth.py
CWE-617
#kyxwcxFSTpPX+6OfH3vEyNY5eNI=
Идентификатор #322
Совпадение 367  assert : 367
Уязвимый файл
./tornado/curl_httpclient.py
CWE-617
#4cG16cY1ppUHdBDCj6BC/6V56/A=
Идентификатор #323
Совпадение 376  assert : 376
Уязвимый файл
./tornado/auth.py
CWE-617
#UT94mMh/PLo/DzYHhfcO7ZWn0lo=
Идентификатор #324
Совпадение 376  assert : 376
Уязвимый файл
./tornado/curl_httpclient.py
CWE-617
#I/ePqyReMMmn3zwj7u16ulxoz9M=
Идентификатор #325
Совпадение 1007  assert : 1007
Уязвимый файл
./tornado/auth.py
CWE-617
#qKhx0/YocgXNQp7MegjF2OsAmLM=
Идентификатор #326
Совпадение 378  assert : 378
Уязвимый файл
./tornado/curl_httpclient.py
CWE-617
#2h6c9hDBScjmihMyJ4mKtfAOQWQ=
Идентификатор #328
Совпадение 394  assert : 394
Уязвимый файл
./tornado/curl_httpclient.py
CWE-617
#wIGOJMB3BbRau+Hzz3M2rlvoVao=
Идентификатор #331
Совпадение 492  assert : 492
Уязвимый файл
./tornado/curl_httpclient.py
CWE-617
#vOL5pZ+mBvVOxlxFs4pD+giNMiA=
Идентификатор #335
Совпадение 488  assert : 488
Уязвимый файл
./tornado/gen.py
CWE-617
#ARFTUH815BoY1UCXmn/5jcYdmFk=
Идентификатор #337
Совпадение 66  assert : 66
Уязвимый файл
./tornado/http1connection.py
CWE-617
#XSSTRkb+FdPxnOHmUr4Y3/FH41Q=
Идентификатор #339
Совпадение 226  assert : 226
Уязвимый файл
./tornado/http1connection.py
CWE-617
#p1lJ0V980iBqy7YNZsNpihqNDxc=
Идентификатор #341
Совпадение 385  assert : 385
Уязвимый файл
./tornado/http1connection.py
CWE-617
#tGhGrfJAK8x54NSJGflmO94xRpc=
Идентификатор #343
Совпадение 277  assert : 277
Уязвимый файл
./tornado/httpserver.py
CWE-617
#F3/Ozq5YK3aE8ONysIMSJWsVtvI=
Идентификатор #344
Совпадение 399  assert : 399
Уязвимый файл
./tornado/http1connection.py
CWE-617
#OuQxQEBUZ+GkA3YN9ubNVroH90s=
Идентификатор #347
Совпадение 400  assert : 400
Уязвимый файл
./tornado/http1connection.py
CWE-617
#XzF2uUirOcD5JQH10FWdXU30YAE=
Идентификатор #350
Совпадение 401  assert : 401
Уязвимый файл
./tornado/http1connection.py
CWE-617
#SsqaBwmb18CC6+7Mr2n6IhMgDSA=
Идентификатор #352
Совпадение 690  assert : 690
Уязвимый файл
./tornado/http1connection.py
CWE-617
#JNimYLvREUBVAE/98XRWqfIRUlI=
Идентификатор #355
Совпадение 792  assert : 792
Уязвимый файл
./tornado/http1connection.py
CWE-617
#wIqWQ2Zp4+zR5C1Kq/G9eUAOwYA=
Идентификатор #358
Совпадение 803  assert : 803
Уязвимый файл
./tornado/http1connection.py
CWE-617
#ATtFM2zNiVEPCSVp+xEqIZ/3o8I=
Идентификатор #361
Совпадение 260  assert : 260
Уязвимый файл
./tornado/locale.py
CWE-617
#ZhKOGWZnoOmkVwfwg6qRLFT0Keo=
Идентификатор #362
Совпадение 508  assert : 508
Уязвимый файл
./tornado/ioloop.py
CWE-617
#kXjGreJOWQW9eM7Db3UJgwMxthI=
Идентификатор #363
Совпадение 495  assert : 495
Уязвимый файл
./tornado/locale.py
CWE-617
#6BHyHba6MgpAL7blP62j6wQ8opk=
Идентификатор #364
Совпадение 519  assert : 519
Уязвимый файл
./tornado/ioloop.py
CWE-617
#D0OT9QbuV1O/mE32MFaE+AuJvEA=
Идентификатор #365
Совпадение 534  assert : 534
Уязвимый файл
./tornado/locale.py
CWE-617
#kkohyEtuAGk2EkkZqbVm2aoIgxw=
Идентификатор #366
Совпадение 527  assert : 527
Уязвимый файл
./tornado/ioloop.py
CWE-617
#782PA0KvCVo8irg9vHF5wZorWY8=
Идентификатор #367
Совпадение 566  assert : 566
Уязвимый файл
./tornado/locale.py
CWE-617
#1iQESmo2D1WpxOf8/sTBWEpihi0=
Идентификатор #368
Совпадение 691  assert : 691
Уязвимый файл
./tornado/ioloop.py
CWE-617
#A/fdH+ViJQgpQqVuSkSI0x2cw1M=
Идентификатор #372
Совпадение 106  assert : 106
Уязвимый файл
./tornado/httpclient.py
CWE-617
#IZ1MzlSN+yuHGxQLAes31/mIy+k=
Идентификатор #373
Совпадение 167  assert : 167
Уязвимый файл
./tornado/log.py
CWE-617
#KXNJE8e7Twx90QfgJi1OI4bx3lY=
Идентификатор #375
Совпадение 576  assert : 576
Уязвимый файл
./tornado/netutil.py
CWE-617
#8yYMY0wkrctaIZqP07h+wduIzJI=
Идентификатор #378
Совпадение 577  assert : 577
Уязвимый файл
./tornado/netutil.py
CWE-617
#i6P05tXZ2jY3Z5zijpOkTF6323U=
Идентификатор #379
Совпадение 510  assert : 510
Уязвимый файл
./tornado/options.py
CWE-617
#urFwFe/aMN2Cl6lquZCzUW8m8mc=
Идентификатор #383
Совпадение 172  assert : 172
Уязвимый файл
./tornado/iostream.py
CWE-617
#lkszyhtGgqUvQ+ZmgBENzOVM9eE=
Идентификатор #384
Совпадение 188  assert : 188
Уязвимый файл
./tornado/iostream.py
CWE-617
#0QEa5WWWE5LIUN+/z82YuRN0lJk=
Идентификатор #385
Совпадение 216  assert : 216
Уязвимый файл
./tornado/queues.py
CWE-617
#MB/pL9+XslTcyHVSmnsgjKU6muw=
Идентификатор #386
Совпадение 211  assert : 211
Уязвимый файл
./tornado/iostream.py
CWE-617
#2eDHfg5JG/YGOGsCwn2yUskaTxs=
Идентификатор #387
Совпадение 264  assert : 264
Уязвимый файл
./tornado/queues.py
CWE-617
#a7nY5iHrePBEMnLv5CxlXwqd+6k=
Идентификатор #389
Совпадение 427  assert : 427
Уязвимый файл
./tornado/iostream.py
CWE-617
#begOI/Sklvbxjo5FPQ7qJg/AbFk=
Идентификатор #392
Совпадение 718  assert : 718
Уязвимый файл
./tornado/iostream.py
CWE-617
#4defwK9O0fD7nzZOW+2x9eNTEGw=
Идентификатор #393
Совпадение 171  assert : 171
Уязвимый файл
./tornado/simple_httpclient.py
CWE-617
#1HAVS74oLuKYj9o/CC4b+fLBjbM=
Идентификатор #394
Совпадение 125  assert : 125
Уязвимый файл
./tornado/process.py
CWE-617
#uUUVwN/9GDVZdfZMRp/dKfShiuU=
Идентификатор #395
Совпадение 788  assert : 788
Уязвимый файл
./tornado/iostream.py
CWE-617
#Ar7QNrisMNsH1jPcuga+a+mD7p8=
Идентификатор #396
Совпадение 172  assert : 172
Уязвимый файл
./tornado/simple_httpclient.py
CWE-617
#iHyvD6kGbnz/VCsMDRndyWNjiqU=
Идентификатор #397
Совпадение 358  assert : 358
Уязвимый файл
./tornado/process.py
CWE-617
#P2v57zTyAqWEU/al1vpx6BHvlHc=
Идентификатор #398
Совпадение 243  assert : 243
Уязвимый файл
./tornado/routing.py
CWE-617
#y8bjGGVJatZFVoA0Od08gDUS7Qc=
Идентификатор #399
Совпадение 940  assert : 940
Уязвимый файл
./tornado/iostream.py
CWE-617
#d2V7rdC2Wd/x9MJvhiF7OoYVlyA=
Идентификатор #400
Совпадение 383  assert : 383
Уязвимый файл
./tornado/simple_httpclient.py
CWE-617
#qhchAIJw606/30x72iFHpGeq7RM=
Идентификатор #401
Совпадение 366  assert : 366
Уязвимый файл
./tornado/process.py
CWE-617
#qdACmaQTpVVk5u7kUPHR/xntELk=
Идентификатор #402
Совпадение 263  assert : 263
Уязвимый файл
./tornado/routing.py
CWE-617
#i+Ttf76zMDvxkILHITtiyLcCgpY=
Идентификатор #403
Совпадение 977  assert : 977
Уязвимый файл
./tornado/iostream.py
CWE-617
#y70VmqGm5x9QlNn+785XApAMkPo=
Идентификатор #404
Совпадение 587  assert : 587
Уязвимый файл
./tornado/simple_httpclient.py
CWE-617
#nAilfhu5/ZVUbZjvsYtE4idqAac=
Идентификатор #405
Совпадение 267  assert : 267
Уязвимый файл
./tornado/routing.py
CWE-617
#29oiVllcAR2miVGumCXzP8KWivQ=
Идентификатор #406
Совпадение 1434  assert : 1434
Уязвимый файл
./tornado/iostream.py
CWE-617
#P31gTx4LVbQA8NgXam2hK+6buxk=
Идентификатор #407
Совпадение 607  assert : 607
Уязвимый файл
./tornado/simple_httpclient.py
CWE-617
#RTpf3qlHkm3e0aM9YQOxgRRQSWg=
Идентификатор #408
Совпадение 271  assert : 271
Уязвимый файл
./tornado/routing.py
CWE-617
#BkK/sC0tZK908VS6k86wIcn4rxk=
Идентификатор #409
Совпадение 1497  assert : 1497
Уязвимый файл
./tornado/iostream.py
CWE-617
#5yBRUbDjULOA5T52gqxF/XpFVr4=
Идентификатор #410
Совпадение 617  assert : 617
Уязвимый файл
./tornado/simple_httpclient.py
CWE-617
#xJ150aQ/CXzENbxrYQowguMjpRg=
Идентификатор #411
Совпадение 342  assert : 342
Уязвимый файл
./tornado/routing.py
CWE-617
#cKFcSCH82una7W4YmxCgvY9D+6g=
Идентификатор #412
Совпадение 622  assert : 622
Уязвимый файл
./tornado/simple_httpclient.py
CWE-617
#aegSnAFQDmytW5Wm4tyKoONLtl0=
Идентификатор #413
Совпадение 392  assert : 392
Уязвимый файл
./tornado/routing.py
CWE-617
#rZUG2qfnxuP9JKijKGNCo8/q3c8=
Идентификатор #414
Совпадение 242  assert : 242
Уязвимый файл
./tornado/tcpserver.py
CWE-617
#H5pUe3UjA6UrIyAIYyYGURhTLFY=
Идентификатор #416
Совпадение 396  assert : 396
Уязвимый файл
./tornado/routing.py
CWE-617
#9IYIF7V36LPWrnFIQNn6FpEsSMo=
Идентификатор #417
Совпадение 260  assert : 260
Уязвимый файл
./tornado/tcpserver.py
CWE-617
#7lsMTCT+igIaAen5cUU1pLZTiiM=
Идентификатор #418
Совпадение 563  assert : 563
Уязвимый файл
./tornado/routing.py
CWE-617
#bTAHoVENaWlk0JMvuMmF2k12LA8=
Идентификатор #419
Совпадение 286  assert : 286
Уязвимый файл
./tornado/tcpserver.py
CWE-617
#dyaHD7kVER0DtSRv4EZazPO2eKw=
Идентификатор #420
Совпадение 596  assert : 596
Уязвимый файл
./tornado/routing.py
CWE-617
#lHP6+IvEBCNvi4Q1CHK9Xdi+/H4=
Идентификатор #423
Совпадение 208  assert : 208
Уязвимый файл
./tornado/testing.py
CWE-617
#R3/C0Pyf3VsVCiBDwASWPGjniFs=
Идентификатор #424
Совпадение 285  assert : 285
Уязвимый файл
./tornado/testing.py
CWE-617
#49F20covH+XxvAmssaodt4AAULQ=
Идентификатор #425
Совпадение 305  assert : 305
Уязвимый файл
./tornado/template.py
CWE-617
#3Pgg3HVnGHywU9AWAWIGUjKybY4=
Идентификатор #426
Совпадение 340  assert : 340
Уязвимый файл
./tornado/testing.py
CWE-617
#uzDZY2HoSRdO0xyJTT40Pp3tcQQ=
Идентификатор #428
Совпадение 583  assert : 583
Уязвимый файл
./tornado/template.py
CWE-617
#MMTHDy2LccStXxg8xXHkUWwnmtE=
Идентификатор #430
Совпадение 588  assert : 588
Уязвимый файл
./tornado/template.py
CWE-617
#2kZFUSy1EVPRHGKzZ2pLagnCIwY=
Идентификатор #432
Совпадение 52  assert : 52
Уязвимый файл
./tornado/wsgi.py
CWE-617
#r4J2wcx7bSjIPksiLT87iS56NNs=
Идентификатор #433
Совпадение 749  assert : 749
Уязвимый файл
./tornado/template.py
CWE-617
#ePiIsI1bmwhwzb6TC2svn1OFwhs=
Идентификатор #434
Совпадение 228  assert : 228
Уязвимый файл
./tornado/web.py
CWE-617
#/Cjfgo+GCMxNE1fZ/QTAIaF3tVM=
Идентификатор #435
Совпадение 142  assert : 142
Уязвимый файл
./tornado/wsgi.py
CWE-617
#HL2i/im+ZqjcaXwd8QcefYqpwr8=
Идентификатор #436
Совпадение 790  assert : 790
Уязвимый файл
./tornado/template.py
CWE-617
#z0mHFoUf/4Gr0QB0elq2SAWPUjo=
Идентификатор #437
Совпадение 468  assert : 468
Уязвимый файл
./tornado/web.py
CWE-617
#bJ2UUZk5WjZLigHc9k5vlvqeyq0=
Идентификатор #439
Совпадение 193  assert : 193
Уязвимый файл
./tornado/wsgi.py
CWE-617
#jDCaZF7upYDyhUpLKPKsrOoE7Mc=
Идентификатор #440
Совпадение 797  assert : 797
Уязвимый файл
./tornado/template.py
CWE-617
#+Ktwyk7azcs+mlgxFQKufZiITbY=
Идентификатор #441
Совпадение 809  assert : 809
Уязвимый файл
./tornado/web.py
CWE-617
#h/6PVnoFGd6wK4Ktaubi8kJ+hgU=
Идентификатор #443
Совпадение 194  assert : 194
Уязвимый файл
./tornado/wsgi.py
CWE-617
#OlOW0D3MCj0VECV7I1KV/tDKvsk=
Идентификатор #444
Совпадение 925  assert : 925
Уязвимый файл
./tornado/template.py
CWE-617
#JPWfeiFI7j6M7n3QmcX+ABtzv3Y=
Идентификатор #445
Совпадение 999  assert : 999
Уязвимый файл
./tornado/web.py
CWE-617
#TBNb1TOMOkDGFxYki9tp+oJZVYs=
Идентификатор #447
Совпадение 1066  assert : 1066
Уязвимый файл
./tornado/web.py
CWE-617
#R3QW4wS78He+DhafbulA3C+pf1Y=
Идентификатор #448
Совпадение 1072  assert : 1072
Уязвимый файл
./tornado/web.py
CWE-617
#5yECkulh+LYXp3CbuCNciQxzs3o=
Идентификатор #449
Совпадение 1138  assert : 1138
Уязвимый файл
./tornado/web.py
CWE-617
#fPd4UViSP7aszjwiDOB7flFmnGY=
Идентификатор #450
Совпадение 1146  assert : 1146
Уязвимый файл
./tornado/web.py
CWE-617
#2saEauy8LCchqjPiIeETTZSIOm0=
Идентификатор #451
Совпадение 1262  assert : 1262
Уязвимый файл
./tornado/web.py
CWE-617
#ERHvZMVgqbcDPrNJBHzvqoHW+j8=
Идентификатор #452
Совпадение 1444  assert : 1444
Уязвимый файл
./tornado/web.py
CWE-617
#SEPcGBjRseeoaIyYiAixfCx0oN0=
Идентификатор #453
Совпадение 1445  assert : 1445
Уязвимый файл
./tornado/web.py
CWE-617
#ZXTQ8iN1s1+zNDDDhmMZcj4rmDg=
Идентификатор #456
Совпадение 1928  assert : 1928
Уязвимый файл
./tornado/web.py
CWE-617
#1+tOblUPSfwR7ePQ5KBmGHnEbVs=
Идентификатор #459
Совпадение 2159  assert : 2159
Уязвимый файл
./tornado/web.py
CWE-617
#PaRs/JBufvaNzd0Ir+mIJ4WQ6yw=
Идентификатор #462
Совпадение 2660  assert : 2660
Уязвимый файл
./tornado/web.py
CWE-617
#JtNyE9DWe52cmypfCSw7//ng5jE=
Идентификатор #464
Совпадение 2671  assert : 2671
Уязвимый файл
./tornado/web.py
CWE-617
#z2p1CUxKJfOOJNFhDMZVjc56Lp8=
Идентификатор #466
Совпадение 2718  assert : 2718
Уязвимый файл
./tornado/web.py
CWE-617
#YAaEflFDRGuKSWjfFJ3hgVpFshY=
Идентификатор #468
Совпадение 2827  assert : 2827
Уязвимый файл
./tornado/web.py
CWE-617
#7hqpQzhJK4WYXHpeBSgB7XQce+w=
Идентификатор #470
Совпадение 2849  assert : 2849
Уязвимый файл
./tornado/web.py
CWE-617
#p6Bb33Vs4Q9IENk01kdqgbs3EXw=
Идентификатор #472
Совпадение 2893  assert : 2893
Уязвимый файл
./tornado/web.py
CWE-617
#9yfoK7CNikTXmE7YCBtneEYqCEo=
Идентификатор #475
Совпадение 3175  assert : 3175
Уязвимый файл
./tornado/web.py
CWE-617
#heh5sXh7CDNTaj6rV7yrsnu4JMU=
Идентификатор #476
Совпадение 92  assert : 92
Уязвимый файл
./demos/s3server/s3server.py
CWE-617
#REkIe72j7w5iCcJ0nharCO9NkLg=
Идентификатор #478
Совпадение 3369  assert : 3369
Уязвимый файл
./tornado/web.py
CWE-617
#mVOuwkXdSFDXZYPqyxvmgVh7SyE=
Идентификатор #481
Совпадение 3403  assert : 3403
Уязвимый файл
./tornado/web.py
CWE-617
#Dl5VgHrwfOAmRg7TRB2hxBhxFGs=
Идентификатор #483
Совпадение 3406  assert : 3406
Уязвимый файл
./tornado/web.py
CWE-617
#Oo9Q9onsmc0dEN6AINXUq+nHl/w=
Идентификатор #485
Совпадение 3466  assert : 3466
Уязвимый файл
./tornado/web.py
CWE-617
#UHeiRZB2aBlqvyETszjbSzaxj/Q=
Идентификатор #495
Совпадение 85  assert : 85
Уязвимый файл
./demos/webspider/webspider.py
CWE-617
#rAxuZ9OHBvIc0MTxNjjr/WvWPig=
Идентификатор #497
Совпадение 37  assert : 37
Уязвимый файл
./maint/benchmark/chunk_benchmark.py
CWE-617
#r+jA2452Aq3mXlLMbpGKkLx2ASg=
Идентификатор #500
Совпадение 375  assert : 375
Уязвимый файл
./tornado/websocket.py
CWE-617
#8clEga+xadJDHuJmJsr6Th8qauM=
Идентификатор #501
Совпадение 561  assert : 561
Уязвимый файл
./tornado/websocket.py
CWE-617
#yT/9E3Zb8z5fUc+YehXdArZaj5Y=
Идентификатор #502
Совпадение 657  assert : 657
Уязвимый файл
./tornado/websocket.py
CWE-617
#s9xpaSvjc+mym17sQ9HwPPZQsTA=
Идентификатор #504
Совпадение 766  assert : 766
Уязвимый файл
./tornado/websocket.py
CWE-617
#Z6zHx38s4Yh8aB1qqPiUQEDtapw=
Идентификатор #506
Совпадение 923  assert : 923
Уязвимый файл
./tornado/websocket.py
CWE-617
#N+Rw00wmEYp4iJqNxb+93V1ZpDg=
Идентификатор #507
Совпадение 981  assert : 981
Уязвимый файл
./tornado/websocket.py
CWE-617
#XpsIAfA0J0duJV+BC9ns9Qk6XJ8=
Идентификатор #508
Совпадение 982  assert : 982
Уязвимый файл
./tornado/websocket.py
CWE-617
#bxW4Bh6Q5aRkzIUvsl5AOwZT7eI=
Идентификатор #509
Совпадение 984  assert : 984
Уязвимый файл
./tornado/websocket.py
CWE-617
#+csijvrxaWrKQd+vh/ayXj0uDWQ=
Идентификатор #510
Совпадение 1086  assert : 1086
Уязвимый файл
./tornado/websocket.py
CWE-617
#0XzZNMpc4X+NO827mXMGtW6qyrA=
Идентификатор #512
Совпадение 1112  assert : 1112
Уязвимый файл
./tornado/websocket.py
CWE-617
#lhLghNxe/Gg5g0v6ezfnQQ5Sumc=
Идентификатор #514
Совпадение 1175  assert : 1175
Уязвимый файл
./tornado/websocket.py
CWE-617
#X+A8bFD+ueDxOBUJF6p7+oeuqhM=
Идентификатор #515
Совпадение 1217  assert : 1217
Уязвимый файл
./tornado/websocket.py
CWE-617
#3Fe6A3HB/+/tQjvzIbGaLSNJx4E=
Идентификатор #516
Совпадение 1312  assert : 1312
Уязвимый файл
./tornado/websocket.py
CWE-617
#Yi5AYcT++PVLNRhYVjku6v7Mj0g=
Идентификатор #517
Совпадение 1317  assert : 1317
Уязвимый файл
./tornado/websocket.py
CWE-617
#qNLagBTcDYIJnquCKhpae8mhuAY=
Идентификатор #518
Совпадение 1340  assert : 1340
Уязвимый файл
./tornado/websocket.py
CWE-617
#wq7ZlnW6W+agJoCrl734xI1wTUc=
Идентификатор #519
Совпадение 1341  assert : 1341
Уязвимый файл
./tornado/websocket.py
CWE-617
#EZrckgcnPcLTNXXkaKrr55hMbU8=
Идентификатор #520
Совпадение 1467  assert : 1467
Уязвимый файл
./tornado/websocket.py
CWE-617
#GKbRAQwN/OpLB6d4xajOY2Atspg=
Идентификатор #521
Совпадение 1582  assert : 1582
Уязвимый файл
./tornado/websocket.py
CWE-617
#zHQ8G1LE4OdZU9L63BJ7JR0N6Ow=
Идентификатор #522
Совпадение 1583  assert : 1583
Уязвимый файл
./tornado/websocket.py
CWE-617
#j645xwdk95V3DtE8U+uup7gg4uw=
Идентификатор #523
Совпадение 1642  assert : 1642
Уязвимый файл
./tornado/websocket.py
CWE-617
#wbDLsMG45ED5DqAkK1uOF+zmnco=
Идентификатор #544
Совпадение 43  assert : 43
Уязвимый файл
./tornado/test/curl_httpclient_test.py
CWE-617
#vA9ncLpPhe6+M3Q02LhUk7Vj99c=
Идентификатор #547
Совпадение 50  assert : 50
Уязвимый файл
./tornado/test/curl_httpclient_test.py
CWE-617
#5Cq2QF+ZBad2GZz23cEKZS6szfM=
Идентификатор #550
Совпадение 51  assert : 51
Уязвимый файл
./tornado/test/curl_httpclient_test.py
CWE-617
#eXASoJO7vglaOZVai254ef0yVQQ=
Идентификатор #552
Совпадение 52  assert : 52
Уязвимый файл
./tornado/test/curl_httpclient_test.py
CWE-617
#BQQ8vhYF0t8Ka8t7n9VkVqvUeCQ=
Идентификатор #554
Совпадение 53  assert : 53
Уязвимый файл
./tornado/test/curl_httpclient_test.py
CWE-617
#VHMbNWEUSnL0Pj1bnm/g1SLRMVA=
Идентификатор #557
Совпадение 54  assert : 54
Уязвимый файл
./tornado/test/curl_httpclient_test.py
CWE-617
#1R2Q6nRRBkDaDYOfTelsSCzT9pE=
Идентификатор #561
Совпадение 626  assert : 626
Уязвимый файл
./tornado/test/iostream_test.py
CWE-617
#Du4Afaus9kTm1hLCJD4UeaiMN+8=
Идентификатор #564
Совпадение 643  assert : 643
Уязвимый файл
./tornado/test/iostream_test.py
CWE-617
#5P8/Bo9NHXjINTfCmH/19SLkWnQ=
Идентификатор #567
Совпадение 646  assert : 646
Уязвимый файл
./tornado/test/iostream_test.py
CWE-617
#++p9Ic3F7BDwFKlGCJ3npL2CPGM=
Идентификатор #568
Совпадение 45  assert : 45
Уязвимый файл
./tornado/test/auth_test.py
CWE-617
#3FBG4JG5MriNdfL33dwN0lcPWk8=
Идентификатор #570
Совпадение 650  assert : 650
Уязвимый файл
./tornado/test/iostream_test.py
CWE-617
#AqJx3qKBIFKXNAnT3VWZRzzQbs0=
Идентификатор #571
Совпадение 135  assert : 135
Уязвимый файл
./tornado/test/auth_test.py
CWE-617
#aoiQWH9d7WzCZ/Px5JOYVk7VeNI=
Идентификатор #572
Совпадение 181  assert : 181
Уязвимый файл
./tornado/test/httpserver_test.py
CWE-617
#KrE7Y19DrUA4OwB6kaJLDimIJIE=
Идентификатор #573
Совпадение 1106  assert : 1106
Уязвимый файл
./tornado/test/iostream_test.py
CWE-617
#cL7wP8rE4xYKk3ZR0i04N7PTzSg=
Идентификатор #574
Совпадение 250  assert : 250
Уязвимый файл
./tornado/test/auth_test.py
CWE-617
#JfEmxn9OjzsDtQRVBsNoVNTBSOg=
Идентификатор #576
Совпадение 251  assert : 251
Уязвимый файл
./tornado/test/auth_test.py
CWE-617
#1WO3VsWJ/W6J6fkIQu3JveJHHow=
Идентификатор #579
Совпадение 252  assert : 252
Уязвимый файл
./tornado/test/auth_test.py
CWE-617
#hr4hHUny6hPKpBBRpFSJAUaEYhM=
Идентификатор #580
Совпадение 292  assert : 292
Уязвимый файл
./tornado/test/gen_test.py
CWE-617
#fVFDSrK+H6pgyAeBaSgLkCDYFR0=
Идентификатор #581
Совпадение 253  assert : 253
Уязвимый файл
./tornado/test/auth_test.py
CWE-617
#RxX2RlNW7RaAEOXeLpCVFD8gXBw=
Идентификатор #582
Совпадение 254  assert : 254
Уязвимый файл
./tornado/test/auth_test.py
CWE-617
#ZT7QPgnTI8N4u3+JF6Y6B48UDqM=
Идентификатор #584
Совпадение 255  assert : 255
Уязвимый файл
./tornado/test/auth_test.py
CWE-617
#kjPRNQaAkrokCZx4N5J/+WqLerk=
Идентификатор #586
Совпадение 256  assert : 256
Уязвимый файл
./tornado/test/auth_test.py
CWE-617
#XWo65keRLIcUObrAkHu613pfFzE=
Идентификатор #587
Совпадение 262  assert : 262
Уязвимый файл
./tornado/test/auth_test.py
CWE-617
#CLYwBapf5W2ULQpgpvf12HO26GE=
Идентификатор #588
Совпадение 263  assert : 263
Уязвимый файл
./tornado/test/auth_test.py
CWE-617
#QTOKEFjdW2S+J+OR7YwSP6v+wqQ=
Идентификатор #589
Совпадение 264  assert : 264
Уязвимый файл
./tornado/test/auth_test.py
CWE-617
#/xbH7eUHXrsvEtdrp47VrUQLy20=
Идентификатор #591
Совпадение 265  assert : 265
Уязвимый файл
./tornado/test/auth_test.py
CWE-617
#7K4i1Mfy6Mjh6QxwKnhKWzrXnds=
Идентификатор #592
Совпадение 266  assert : 266
Уязвимый файл
./tornado/test/auth_test.py
CWE-617
#QWXjXw4pP11gFPwejUJ/+aVHp2c=
Идентификатор #593
Совпадение 267  assert : 267
Уязвимый файл
./tornado/test/auth_test.py
CWE-617
#zAAnEDKKGp9yIt1DOFuBTBBVGEM=
Идентификатор #594
Совпадение 268  assert : 268
Уязвимый файл
./tornado/test/auth_test.py
CWE-617
#B5TgfkQVLsrzlXWxotvazCAHo1U=
Идентификатор #596
Совпадение 569  assert : 569
Уязвимый файл
./tornado/test/auth_test.py
CWE-617
#/NeKIZQeCRC1b0PIhiaCiZ9njYc=
Идентификатор #598
Совпадение 578  assert : 578
Уязвимый файл
./tornado/test/auth_test.py
CWE-617
#P/tFewBmZ/dLkSyu7Z0AjPcS20s=
Идентификатор #599
Совпадение 102  assert : 102
Уязвимый файл
./tornado/test/simple_httpclient_test.py
CWE-617
#VzVriul0Wov/rBxsZApmXETgY7k=
Идентификатор #614
Совпадение 236  assert : 236
Уязвимый файл
./tornado/test/template_test.py
CWE-617
#di5IlNqy7RoAdci3mTd6HyMxeQ0=
Идентификатор #615
Совпадение 129  assert : 129
Уязвимый файл
./tornado/test/web_test.py
CWE-617
#cct8rOhQrMBHPrNsCqza3W7H5xs=
Идентификатор #616
Совпадение 389  assert : 389
Уязвимый файл
./tornado/test/web_test.py
CWE-617
#ukGLvcH1PUMcK8CoXSDvjwaytXY=
Идентификатор #617
Совпадение 393  assert : 393
Уязвимый файл
./tornado/test/web_test.py
CWE-617
#+sXzh0Gnk25bovL4SDhz1ELUJ5g=
Идентификатор #618
Совпадение 1462  assert : 1462
Уязвимый файл
./tornado/test/web_test.py
CWE-617
#Nuk2PLJzzZgnYw1ufGThMyiovV0=
Идентификатор #620
Совпадение 1678  assert : 1678
Уязвимый файл
./tornado/test/web_test.py
CWE-617
#oaGpefolFKUUVpy4A/J4unNGaHU=
Идентификатор #623
Совпадение 1790  assert : 1790
Уязвимый файл
./tornado/test/web_test.py
CWE-617
#34qYGvbMZr1VeihY96YXmIYOkeA=
Идентификатор #625
Совпадение 2927  assert : 2927
Уязвимый файл
./tornado/test/web_test.py
CWE-617
#lWOERtFa2BPm8SvglTAmHmxFS/w=
Идентификатор #627
Совпадение 2931  assert : 2931
Уязвимый файл
./tornado/test/web_test.py
CWE-617
#1WJya7zZbHnWdfPNUeQE26d/hqg=
Идентификатор #657
Совпадение 27  assert : 27
Уязвимый файл
./maint/test/redbot/red_test.py
CWE-617
#N+6qTZmbLilUv8CJStWJhNfts/4=
Идентификатор #661
Совпадение 19  assert : 19
Уязвимый файл
./maint/test/websocket/client.py
CWE-617
#ASzCo6KUoV8lPwovMB5jSA4Qn5w=
Идентификатор #662
Совпадение 34  assert : 34
Уязвимый файл
./maint/test/websocket/client.py
CWE-617
Потенциальная
Использование urllib
Описание уязвимости
#Ov5u93NWt7m2/T2YbSW9epztTe4=
Идентификатор #663
Совпадение 48  urllib.urlopen(url) : 48
Уязвимый файл
./maint/vm/windows/bootstrap.py
OWASP - A04 CWE-73
Потенциальная
Использование жестко закодированного пароля
Описание уязвимости
#5oBjXE2AWGI+/KwrZodQQYblJAw=
Идентификатор #307
Совпадение 710  _OAUTH_REQUEST_TOKEN_URL = "https://api.twitter.com/oauth/request_token" : 710
Уязвимый файл
./tornado/auth.py
OWASP - A07 CWE-259
#bw8QgKCNofEfntag2sYfd52Ax0M=
Идентификатор #309
Совпадение 711  _OAUTH_ACCESS_TOKEN_URL = "https://api.twitter.com/oauth/access_token" : 711
Уязвимый файл
./tornado/auth.py
OWASP - A07 CWE-259
#psKJ5APwP2XRBqxzzB11I5wGlsg=
Идентификатор #311
Совпадение 854  _OAUTH_ACCESS_TOKEN_URL = "https://www.googleapis.com/oauth2/v4/token" : 854
Уязвимый файл
./tornado/auth.py
OWASP - A07 CWE-259
#EivHhpIgtQFXxtN/U0M3K3q42FE=
Идентификатор #314
Совпадение 927  _OAUTH_ACCESS_TOKEN_URL = "https://graph.facebook.com/oauth/access_token?" : 927
Уязвимый файл
./tornado/auth.py
OWASP - A07 CWE-259
#O01juxwHx9JYqzjV6Od3VEYs1po=
Идентификатор #369
Совпадение 353  proxy_password="" : 353
Уязвимый файл
./tornado/httpclient.py
OWASP - A07 CWE-259
#sTVFIQBdJTi0R3UNnImXtgsYmx0=
Идентификатор #454
Совпадение 40  cookie_secret="__TODO:_GENERATE_YOUR_OWN_RANDOM_VALUE_HERE__" : 40
Уязвимый файл
./demos/facebook/facebook.py
OWASP - A07 CWE-259
#8XV6RDsiiRoQjPH6vL77kDBiYq4=
Идентификатор #455
Совпадение 76  cookie_secret="__TODO:_GENERATE_YOUR_OWN_RANDOM_VALUE_HERE__" : 76
Уязвимый файл
./demos/blog/blog.py
OWASP - A07 CWE-259
#vCDAaf535rtIgsYUzmOL9Gn4jyk=
Идентификатор #488
Совпадение 39  cookie_secret="__TODO:_GENERATE_YOUR_OWN_RANDOM_VALUE_HERE__" : 39
Уязвимый файл
./demos/websocket/chatdemo.py
OWASP - A07 CWE-259
#Kb7Xb5NN1REMm1Rv+Tf7hfGODQM=
Идентификатор #503
Совпадение 118  cookie_secret="__TODO:_GENERATE_YOUR_OWN_RANDOM_VALUE_HERE__" : 118
Уязвимый файл
./demos/chat/chatdemo.py
OWASP - A07 CWE-259
#RRC3aM/b/kyHjY+aRnnNxeTPxus=
Идентификатор #524
Совпадение 93  "password": "bar" : 93
Уязвимый файл
./tornado/test/curl_httpclient_test.py
OWASP - A07 CWE-259
#6USOmlJga04OqerZ201n8+RiJqs=
Идентификатор #525
Совпадение 97  "password": "barユ£" : 97
Уязвимый файл
./tornado/test/curl_httpclient_test.py
OWASP - A07 CWE-259
#P4+UgokmvlA2fId14eqaEdVDtvw=
Идентификатор #526
Совпадение 63  secret="qwer" : 63
Уязвимый файл
./tornado/test/auth_test.py
OWASP - A07 CWE-259
#p4qyFiD7je8t8E2Op49c+JBYi8E=
Идентификатор #527
Совпадение 248  auth_password="open sesame" : 248
Уязвимый файл
./tornado/test/httpclient_test.py
OWASP - A07 CWE-259
#bu3oxUiFf+SebTz2xTlKa5aFavA=
Идентификатор #528
Совпадение 111  auth_password="bar" : 111
Уязвимый файл
./tornado/test/curl_httpclient_test.py
OWASP - A07 CWE-259
#RVIAgbK82fv5w3vgej03dd6Rd20=
Идентификатор #529
Совпадение 81  secret="5678" : 81
Уязвимый файл
./tornado/test/auth_test.py
OWASP - A07 CWE-259
#NbwF/Kc8mQJW/lBcxYZmwF81VFc=
Идентификатор #530
Совпадение 258  auth_password="open sesame" : 258
Уязвимый файл
./tornado/test/httpclient_test.py
OWASP - A07 CWE-259
#e6cK3hTUDvQf7oQy+LZj0bbJWUs=
Идентификатор #531
Совпадение 128  auth_password="barユ£" : 128
Уязвимый файл
./tornado/test/curl_httpclient_test.py
OWASP - A07 CWE-259
#nUcYD3s9u4fPT/Ue+BwxE8ybGu0=
Идентификатор #532
Совпадение 108  secret="qwer" : 108
Уязвимый файл
./tornado/test/auth_test.py
OWASP - A07 CWE-259
#0N/rbmt1gK4P/mqJKDFv0QP5+Dg=
Идентификатор #533
Совпадение 267  auth_password="123£" : 267
Уязвимый файл
./tornado/test/httpclient_test.py
OWASP - A07 CWE-259
#J5/Wb3FViab4a/eHKsG9xUAs0LU=
Идентификатор #535
Совпадение 113  secret="5678" : 113
Уязвимый файл
./tornado/test/auth_test.py
OWASP - A07 CWE-259
#IwpFEm06ZlDIQP8ArSQX/pC9uCc=
Идентификатор #536
Совпадение 275  auth_password="səcrət" : 275
Уязвимый файл
./tornado/test/httpclient_test.py
OWASP - A07 CWE-259
#7Thp8Wdxb8cvJw0t5VCATcdJe/w=
Идентификатор #538
Совпадение 164  access_token="asdf" : 164
Уязвимый файл
./tornado/test/auth_test.py
OWASP - A07 CWE-259
#1CWRjW8IifSDqK3I2s6J/0aNvxI=
Идентификатор #539
Совпадение 288  auth_password="open sesame" : 288
Уязвимый файл
./tornado/test/httpclient_test.py
OWASP - A07 CWE-259
#/Is0d2WzSdTyo1sWli04FUO0q3U=
Идентификатор #541
Совпадение 230  secret="vbnm" : 230
Уязвимый файл
./tornado/test/auth_test.py
OWASP - A07 CWE-259
#1Clr/Z60lGLXMFk5hr4Pmlj1muk=
Идентификатор #545
Совпадение 336  twitter_consumer_secret="test_twitter_consumer_secret" : 336
Уязвимый файл
./tornado/test/auth_test.py
OWASP - A07 CWE-259
#Jk/0ZVs/y2GIxw7MwpozZbFCLSg=
Идентификатор #548
Совпадение 338  facebook_secret="test_facebook_secret" : 338
Уязвимый файл
./tornado/test/auth_test.py
OWASP - A07 CWE-259
#+9uaM3SM5WjVDxGiPTWBFJmfeL0=
Идентификатор #551
Совпадение 380  secret="5678" : 380
Уязвимый файл
./tornado/test/auth_test.py
OWASP - A07 CWE-259
#pVdXRQ5LXGaKll7vvGoUkLHAX/Q=
Идентификатор #553
Совпадение 422  secret="5678" : 422
Уязвимый файл
./tornado/test/auth_test.py
OWASP - A07 CWE-259
#awVkUm+fBq9eMTsStKYqHlYKB/U=
Идентификатор #556
Совпадение 508  u"secret": u"vbnm" : 508
Уязвимый файл
./tornado/test/auth_test.py
OWASP - A07 CWE-259
#AHdQbzrHxTDQBR6FOBRv/SJaXX0=
Идентификатор #559
Совпадение 572  "access_token": "fake-access-token" : 572
Уязвимый файл
./tornado/test/auth_test.py
OWASP - A07 CWE-259
#SxeZHiwNy/D9BGuSUT3FAJv0cMQ=
Идентификатор #562
Совпадение 596  "secret": "fake_google_client_secret" : 596
Уязвимый файл
./tornado/test/auth_test.py
OWASP - A07 CWE-259
#gQBQz2c0JiOoeo9ohGHiN66OYy0=
Идентификатор #565
Совпадение 606  u"access_token": u"fake-access-token" : 606
Уязвимый файл
./tornado/test/auth_test.py
OWASP - A07 CWE-259
#75lLpE5HwkKz5Cx5FKNmp6dRl+o=
Идентификатор #605
Совпадение 709  COOKIE_SECRET = "WebTest.COOKIE_SECRET" : 709
Уязвимый файл
./tornado/test/web_test.py
OWASP - A07 CWE-259
#Jgr+5EN9fYh5q/zgJlv4rIQXoCw=
Идентификатор #606
Совпадение 2539  SECRET = "It's a secret to everybody" : 2539
Уязвимый файл
./tornado/test/web_test.py
OWASP - A07 CWE-259
#PCXJXZ+7P+R5ufbWkJtYZNrEMqU=
Идентификатор #607
Совпадение 2772  token="3|" : 2772
Уязвимый файл
./tornado/test/web_test.py
OWASP - A07 CWE-259
#m9gie5yzJgmrSpQS/QpHoBpnylw=
Идентификатор #608
Совпадение 2789  token="deadbeef" : 2789
Уязвимый файл
./tornado/test/web_test.py
OWASP - A07 CWE-259
#IfkH5C8Y688dkd8jiV9/oMhdscc=
Идентификатор #610
Совпадение 2798  token="xoxo" : 2798
Уязвимый файл
./tornado/test/web_test.py
OWASP - A07 CWE-259
Потенциальная
Использование жестко закодированного пароля
Описание уязвимости
Уязвимый код 710  _OAUTH_REQUEST_TOKEN_URL
#bYKlGTfZnsGOn62rhxTrJs6ha7M=
Идентификатор #327
Уязвимый файл
./tornado/auth.py : 710
Входной файл
./tornado/auth.py : 710
OWASP - A07 CWE-259
...\auth.py Точка входа
706
and all of the custom Twitter user attributes described at
707
https://dev.twitter.com/docs/api/1.1/get/users/show
708
"""
710
_OAUTH_REQUEST_TOKEN_URL = 
"https://api.twitter.com/oauth/request_token"

                                                                                                                
                                                                                                        
                                                                                                        
711
_OAUTH_ACCESS_TOKEN_URL = "https://api.twitter.com/oauth/access_token"
712
_OAUTH_AUTHORIZE_URL = "https://api.twitter.com/oauth/authorize"
713
_OAUTH_AUTHENTICATE_URL = "https://api.twitter.com/oauth/authenticate"
...\auth.py Точка входа данных
706
and all of the custom Twitter user attributes described at
707
https://dev.twitter.com/docs/api/1.1/get/users/show
708
"""
710
_OAUTH_REQUEST_TOKEN_URL = 
"https://api.twitter.com/oauth/request_token"

                                                                                                                
                                                                                                        
                                                                                                        
711
_OAUTH_ACCESS_TOKEN_URL = "https://api.twitter.com/oauth/access_token"
712
_OAUTH_AUTHORIZE_URL = "https://api.twitter.com/oauth/authorize"
713
_OAUTH_AUTHENTICATE_URL = "https://api.twitter.com/oauth/authenticate"
...\auth.py Точка выхода
706
and all of the custom Twitter user attributes described at
707
https://dev.twitter.com/docs/api/1.1/get/users/show
708
"""
710

                                                                                                                
                                                                                                        
                                                                                                            
                                                                                                                
                                                                                                                    
_OAUTH_REQUEST_TOKEN_URL
 = "https://api.twitter.com/oauth/request_token"
711
_OAUTH_ACCESS_TOKEN_URL = "https://api.twitter.com/oauth/access_token"
712
_OAUTH_AUTHORIZE_URL = "https://api.twitter.com/oauth/authorize"
713
_OAUTH_AUTHENTICATE_URL = "https://api.twitter.com/oauth/authenticate"
Потенциальная
Использование жестко закодированного пароля
Описание уязвимости
Уязвимый код 711  _OAUTH_ACCESS_TOKEN_URL
#qm1q9/KAx8Vja7XZJcfEiNY42Uw=
Идентификатор #330
Уязвимый файл
./tornado/auth.py : 711
Входной файл
./tornado/auth.py : 711
OWASP - A07 CWE-259
...\auth.py Точка входа
707
https://dev.twitter.com/docs/api/1.1/get/users/show
708
"""
710
_OAUTH_REQUEST_TOKEN_URL = "https://api.twitter.com/oauth/request_token"
711
_OAUTH_ACCESS_TOKEN_URL = 
"https://api.twitter.com/oauth/access_token"

                                                                                                                
                                                                                                        
                                                                                                        
712
_OAUTH_AUTHORIZE_URL = "https://api.twitter.com/oauth/authorize"
713
_OAUTH_AUTHENTICATE_URL = "https://api.twitter.com/oauth/authenticate"
714
_OAUTH_NO_CALLBACKS = False
...\auth.py Точка входа данных
707
https://dev.twitter.com/docs/api/1.1/get/users/show
708
"""
710
_OAUTH_REQUEST_TOKEN_URL = "https://api.twitter.com/oauth/request_token"
711
_OAUTH_ACCESS_TOKEN_URL = 
"https://api.twitter.com/oauth/access_token"

                                                                                                                
                                                                                                        
                                                                                                        
712
_OAUTH_AUTHORIZE_URL = "https://api.twitter.com/oauth/authorize"
713
_OAUTH_AUTHENTICATE_URL = "https://api.twitter.com/oauth/authenticate"
714
_OAUTH_NO_CALLBACKS = False
...\auth.py Точка выхода
707
https://dev.twitter.com/docs/api/1.1/get/users/show
708
"""
710
_OAUTH_REQUEST_TOKEN_URL = "https://api.twitter.com/oauth/request_token"
711

                                                                                                                
                                                                                                        
                                                                                                            
                                                                                                                
                                                                                                                    
_OAUTH_ACCESS_TOKEN_URL
 = "https://api.twitter.com/oauth/access_token"
712
_OAUTH_AUTHORIZE_URL = "https://api.twitter.com/oauth/authorize"
713
_OAUTH_AUTHENTICATE_URL = "https://api.twitter.com/oauth/authenticate"
714
_OAUTH_NO_CALLBACKS = False
Потенциальная
Использование жестко закодированного пароля
Описание уязвимости
Уязвимый код 854  _OAUTH_ACCESS_TOKEN_URL
#uNhSrrOjjnX2ywE/NJLLA1oXNPE=
Идентификатор #333
Уязвимый файл
./tornado/auth.py : 854
Входной файл
./tornado/auth.py : 854
OWASP - A07 CWE-259
...\auth.py Точка входа
850
.. versionadded:: 3.2
851
"""
853
_OAUTH_AUTHORIZE_URL = "https://accounts.google.com/o/oauth2/v2/auth"
854
_OAUTH_ACCESS_TOKEN_URL = 
"https://www.googleapis.com/oauth2/v4/token"

                                                                                                                
                                                                                                        
                                                                                                        
855
_OAUTH_USERINFO_URL = "https://www.googleapis.com/oauth2/v1/userinfo"
856
_OAUTH_NO_CALLBACKS = False
857
_OAUTH_SETTINGS_KEY = "google_oauth"
...\auth.py Точка входа данных
850
.. versionadded:: 3.2
851
"""
853
_OAUTH_AUTHORIZE_URL = "https://accounts.google.com/o/oauth2/v2/auth"
854
_OAUTH_ACCESS_TOKEN_URL = 
"https://www.googleapis.com/oauth2/v4/token"

                                                                                                                
                                                                                                        
                                                                                                        
855
_OAUTH_USERINFO_URL = "https://www.googleapis.com/oauth2/v1/userinfo"
856
_OAUTH_NO_CALLBACKS = False
857
_OAUTH_SETTINGS_KEY = "google_oauth"
...\auth.py Точка выхода
850
.. versionadded:: 3.2
851
"""
853
_OAUTH_AUTHORIZE_URL = "https://accounts.google.com/o/oauth2/v2/auth"
854

                                                                                                                
                                                                                                        
                                                                                                            
                                                                                                                
                                                                                                                    
_OAUTH_ACCESS_TOKEN_URL
 = "https://www.googleapis.com/oauth2/v4/token"
855
_OAUTH_USERINFO_URL = "https://www.googleapis.com/oauth2/v1/userinfo"
856
_OAUTH_NO_CALLBACKS = False
857
_OAUTH_SETTINGS_KEY = "google_oauth"
Потенциальная
Использование жестко закодированного пароля
Описание уязвимости
Уязвимый код 927  _OAUTH_ACCESS_TOKEN_URL
#rlmPaCKNMgleA7uskc435HONmjk=
Идентификатор #336
Уязвимый файл
./tornado/auth.py : 927
Входной файл
./tornado/auth.py : 927
OWASP - A07 CWE-259
...\auth.py Точка входа
921
        return escape.json_decode(response.body)
924
class FacebookGraphMixin(OAuth2Mixin):
925
    """Facebook authentication using the new Graph API and OAuth2."""
927
    _OAUTH_ACCESS_TOKEN_URL = 
"https://graph.facebook.com/oauth/access_token?"

                                                                                                                
                                                                                                        
                                                                                                        
928
    _OAUTH_AUTHORIZE_URL = "https://www.facebook.com/dialog/oauth?"
929
    _OAUTH_NO_CALLBACKS = False
930
    _FACEBOOK_BASE_URL = "https://graph.facebook.com"
...\auth.py Точка входа данных
921
        return escape.json_decode(response.body)
924
class FacebookGraphMixin(OAuth2Mixin):
925
    """Facebook authentication using the new Graph API and OAuth2."""
927
    _OAUTH_ACCESS_TOKEN_URL = 
"https://graph.facebook.com/oauth/access_token?"

                                                                                                                
                                                                                                        
                                                                                                        
928
    _OAUTH_AUTHORIZE_URL = "https://www.facebook.com/dialog/oauth?"
929
    _OAUTH_NO_CALLBACKS = False
930
    _FACEBOOK_BASE_URL = "https://graph.facebook.com"
...\auth.py Точка выхода
921
        return escape.json_decode(response.body)
924
class FacebookGraphMixin(OAuth2Mixin):
925
    """Facebook authentication using the new Graph API and OAuth2."""
927
    
_OAUTH_ACCESS_TOKEN_URL
 = "https://graph.facebook.com/oauth/access_token?...
928
    _OAUTH_AUTHORIZE_URL = "https://www.facebook.com/dialog/oauth?"
929
    _OAUTH_NO_CALLBACKS = False
930
    _FACEBOOK_BASE_URL = "https://graph.facebook.com"
Потенциальная
Использование жестко закодированного пароля
Описание уязвимости
Уязвимый код 381  password
#62ppI6TK1YR12W5NruSvEHgBN/k=
Идентификатор #415
Уязвимый файл
./tornado/simple_httpclient.py : 381
Входной файл
./tornado/simple_httpclient.py : 381
OWASP - A07 CWE-259
...\simple_httpclient.py Точка входа
378
    username, password = self.parsed.username, self.parsed.password
379
elif self.request.auth_username is not None:
380
    username = self.request.auth_username
381
    password = self.request.auth_password or 
""

                                                                                                                
                                                                                                        
                                                                                                        
382
if username is not None:
383
    assert password is not None
384
    if self.request.auth_mode not in (None, "basic"):
...\simple_httpclient.py Точка входа данных
378
    username, password = self.parsed.username, self.parsed.password
379
elif self.request.auth_username is not None:
380
    username = self.request.auth_username
381
    password = self.request.auth_password or 
""

                                                                                                                
                                                                                                        
                                                                                                        
382
if username is not None:
383
    assert password is not None
384
    if self.request.auth_mode not in (None, "basic"):
...\simple_httpclient.py Изменение данных
378
    username, password = self.parsed.username, self.parsed.password
379
elif self.request.auth_username is not None:
380
    username = self.request.auth_username
381
    password = 
self.request.auth_password or ""

                                                                                                                
                                                                                                        
                                                                                                        
382
if username is not None:
383
    assert password is not None
384
    if self.request.auth_mode not in (None, "basic"):
...\simple_httpclient.py Точка выхода
378
    username, password = self.parsed.username, self.parsed.password
379
elif self.request.auth_username is not None:
380
    username = self.request.auth_username
381
    
password
 = self.request.auth_password or ""
382
if username is not None:
383
    assert password is not None
384
    if self.request.auth_mode not in (None, "basic"):
Потенциальная
Использование жестко закодированного пароля
Описание уязвимости
Уязвимый код 709  COOKIE_SECRET
#ocYEZ5R5BjiU39n1EFbROQ7laac=
Идентификатор #630
Уязвимый файл
./tornado/test/web_test.py : 709
Входной файл
./tornado/test/web_test.py : 709
OWASP - A07 CWE-259
...\web_test.py Точка входа
704
        )
707
# This test was shared with wsgi_test.py; now the name is meaningless.
708
class WSGISafeWebTest(WebTestCase):
709
    COOKIE_SECRET = 
"WebTest.COOKIE_SECRET"

                                                                                                                
                                                                                                        
                                                                                                        
711
    def get_app_kwargs(self):
712
        loader = DictLoader(
713
            {
...\web_test.py Точка входа данных
704
        )
707
# This test was shared with wsgi_test.py; now the name is meaningless.
708
class WSGISafeWebTest(WebTestCase):
709
    COOKIE_SECRET = 
"WebTest.COOKIE_SECRET"

                                                                                                                
                                                                                                        
                                                                                                        
711
    def get_app_kwargs(self):
712
        loader = DictLoader(
713
            {
...\web_test.py Точка выхода
704
        )
707
# This test was shared with wsgi_test.py; now the name is meaningless.
708
class WSGISafeWebTest(WebTestCase):
709
    
COOKIE_SECRET
 = "WebTest.COOKIE_SECRET"
711
    def get_app_kwargs(self):
712
        loader = DictLoader(
713
            {
Потенциальная
Использование жестко закодированного пароля
Описание уязвимости
Уязвимый код 2539  SECRET
#FprtZ02ySrjPttgnQcgG/spNvYs=
Идентификатор #633
Уязвимый файл
./tornado/test/web_test.py : 2539
Входной файл
./tornado/test/web_test.py : 2539
OWASP - A07 CWE-259
...\web_test.py Точка входа
2534
                self.skipTest("requires HTTP/1.x")
2535
            self.assertEqual(response.code, 599)
2538
class SignedValueTest(unittest.TestCase):
2539
    SECRET = 
"It's a secret to everybody"

                                                                                                                
                                                                                                        
                                                                                                        
2540
    SECRET_DICT = {0: "asdfbasdf", 1: "12312312", 2: "2342342"}
2542
    def past(self):
2543
        return self.present() - 86400 * 32
...\web_test.py Точка входа данных
2534
                self.skipTest("requires HTTP/1.x")
2535
            self.assertEqual(response.code, 599)
2538
class SignedValueTest(unittest.TestCase):
2539
    SECRET = 
"It's a secret to everybody"

                                                                                                                
                                                                                                        
                                                                                                        
2540
    SECRET_DICT = {0: "asdfbasdf", 1: "12312312", 2: "2342342"}
2542
    def past(self):
2543
        return self.present() - 86400 * 32
...\web_test.py Точка выхода
2534
                self.skipTest("requires HTTP/1.x")
2535
            self.assertEqual(response.code, 599)
2538
class SignedValueTest(unittest.TestCase):
2539
    
SECRET
 = "It's a secret to everybody"
2540
    SECRET_DICT = {0: "asdfbasdf", 1: "12312312", 2: "2342342"}
2542
    def past(self):
2543
        return self.present() - 86400 * 32
Потенциальная
Использование жестко закодированного пароля
Описание уязвимости
Уязвимый код 2540  SECRET_DICT
#S17dsp14imLFcQwh2nK1R/kYxYo=
Идентификатор #636
Уязвимый файл
./tornado/test/web_test.py : 2540
Входной файл
./tornado/test/web_test.py : 2540
OWASP - A07 CWE-259
...\web_test.py Точка входа
2535
            self.assertEqual(response.code, 599)
2538
class SignedValueTest(unittest.TestCase):
2539
    SECRET = "It's a secret to everybody"
2540
    SECRET_DICT = {0: 
"asdfbasdf"
, 1: "12312312", 2: "2342342"}
2542
    def past(self):
2543
        return self.present() - 86400 * 32
2545
    def present(self):
...\web_test.py Точка входа данных
2535
            self.assertEqual(response.code, 599)
2538
class SignedValueTest(unittest.TestCase):
2539
    SECRET = "It's a secret to everybody"
2540
    SECRET_DICT = {0: 
"asdfbasdf"
, 1: "12312312", 2: "2342342"}
2542
    def past(self):
2543
        return self.present() - 86400 * 32
2545
    def present(self):
...\web_test.py Изменение данных
2535
            self.assertEqual(response.code, 599)
2538
class SignedValueTest(unittest.TestCase):
2539
    SECRET = "It's a secret to everybody"
2540
    SECRET_DICT = {
0
: "asdfbasdf", 1: "12312312", 2: "2342342"}
2542
    def past(self):
2543
        return self.present() - 86400 * 32
2545
    def present(self):
...\web_test.py Изменение данных
2535
            self.assertEqual(response.code, 599)
2538
class SignedValueTest(unittest.TestCase):
2539
    SECRET = "It's a secret to everybody"
2540
    SECRET_DICT = 
{0: "asdfbasdf", 1: "12312312", 2: "2342342"}

                                                                                                                
                                                                                                        
                                                                                                        
2542
    def past(self):
2543
        return self.present() - 86400 * 32
2545
    def present(self):
...\web_test.py Точка выхода
2535
            self.assertEqual(response.code, 599)
2538
class SignedValueTest(unittest.TestCase):
2539
    SECRET = "It's a secret to everybody"
2540
    
SECRET_DICT
 = {0: "asdfbasdf", 1: "12312312", 2: "2342342"}
2542
    def past(self):
2543
        return self.present() - 86400 * 32
2545
    def present(self):
#y5N2tN8Bjd7t021nCxW5c4MUObA=
Идентификатор #638
Уязвимый файл
./tornado/test/web_test.py : 2540
Входной файл
./tornado/test/web_test.py : 2540
OWASP - A07 CWE-259
...\web_test.py Точка входа
2535
            self.assertEqual(response.code, 599)
2538
class SignedValueTest(unittest.TestCase):
2539
    SECRET = "It's a secret to everybody"
2540
    SECRET_DICT = {0: "asdfbasdf", 1: 
"12312312"
, 2: "2342342"}
2542
    def past(self):
2543
        return self.present() - 86400 * 32
2545
    def present(self):
...\web_test.py Точка входа данных
2535
            self.assertEqual(response.code, 599)
2538
class SignedValueTest(unittest.TestCase):
2539
    SECRET = "It's a secret to everybody"
2540
    SECRET_DICT = {0: "asdfbasdf", 1: 
"12312312"
, 2: "2342342"}
2542
    def past(self):
2543
        return self.present() - 86400 * 32
2545
    def present(self):
...\web_test.py Изменение данных
2535
            self.assertEqual(response.code, 599)
2538
class SignedValueTest(unittest.TestCase):
2539
    SECRET = "It's a secret to everybody"
2540
    SECRET_DICT = {0: "asdfbasdf", 
1
: "12312312", 2: "2342342"}
2542
    def past(self):
2543
        return self.present() - 86400 * 32
2545
    def present(self):
...\web_test.py Изменение данных
2535
            self.assertEqual(response.code, 599)
2538
class SignedValueTest(unittest.TestCase):
2539
    SECRET = "It's a secret to everybody"
2540
    SECRET_DICT = 
{0: "asdfbasdf", 1: "12312312", 2: "2342342"}

                                                                                                                
                                                                                                        
                                                                                                        
2542
    def past(self):
2543
        return self.present() - 86400 * 32
2545
    def present(self):
...\web_test.py Точка выхода
2535
            self.assertEqual(response.code, 599)
2538
class SignedValueTest(unittest.TestCase):
2539
    SECRET = "It's a secret to everybody"
2540
    
SECRET_DICT
 = {0: "asdfbasdf", 1: "12312312", 2: "2342342"}
2542
    def past(self):
2543
        return self.present() - 86400 * 32
2545
    def present(self):
#xbE31o/7LVfhDSljVWKeUbqbc/w=
Идентификатор #640
Уязвимый файл
./tornado/test/web_test.py : 2540
Входной файл
./tornado/test/web_test.py : 2540
OWASP - A07 CWE-259
...\web_test.py Точка входа
2535
            self.assertEqual(response.code, 599)
2538
class SignedValueTest(unittest.TestCase):
2539
    SECRET = "It's a secret to everybody"
2540
... SECRET_DICT = {0: "asdfbasdf", 1: "12312312", 2: 
"2342342"
}
2542
    def past(self):
2543
        return self.present() - 86400 * 32
2545
    def present(self):
...\web_test.py Точка входа данных
2535
            self.assertEqual(response.code, 599)
2538
class SignedValueTest(unittest.TestCase):
2539
    SECRET = "It's a secret to everybody"
2540
... SECRET_DICT = {0: "asdfbasdf", 1: "12312312", 2: 
"2342342"
}
2542
    def past(self):
2543
        return self.present() - 86400 * 32
2545
    def present(self):
...\web_test.py Изменение данных
2535
            self.assertEqual(response.code, 599)
2538
class SignedValueTest(unittest.TestCase):
2539
    SECRET = "It's a secret to everybody"
2540
    SECRET_DICT = {0: "asdfbasdf", 1: "1
2
312312", 2: "2342342"}
2542
    def past(self):
2543
        return self.present() - 86400 * 32
2545
    def present(self):
...\web_test.py Изменение данных
2535
            self.assertEqual(response.code, 599)
2538
class SignedValueTest(unittest.TestCase):
2539
    SECRET = "It's a secret to everybody"
2540
    SECRET_DICT = 
{0: "asdfbasdf", 1: "12312312", 2: "2342342"}

                                                                                                                
                                                                                                        
                                                                                                        
2542
    def past(self):
2543
        return self.present() - 86400 * 32
2545
    def present(self):
...\web_test.py Точка выхода
2535
            self.assertEqual(response.code, 599)
2538
class SignedValueTest(unittest.TestCase):
2539
    SECRET = "It's a secret to everybody"
2540
    
SECRET_DICT
 = {0: "asdfbasdf", 1: "12312312", 2: "2342342"}
2542
    def past(self):
2543
        return self.present() - 86400 * 32
2545
    def present(self):
Потенциальная
Использование устаревшей функции
Описание уязвимости
#b+a9tlcx2AyXwIjdDVqQmpUkntU=
Идентификатор #664
Совпадение 48  urllib.urlopen(url) : 48
Уязвимый файл
./maint/vm/windows/bootstrap.py
CWE-477
Потенциальная
Небезопасные настройки SSL
Описание уязвимости
#NDr47sMBrIZy/Lt/+dn7X1jTinI=
Идентификатор #560
Совпадение 169  ssl.PROTOCOL_SSLv3 : 169
Уязвимый файл
./tornado/test/httpserver_test.py
OWASP - A04 CWE-311
#/S6c0lH23Fd1TamP8hdByMKwKmQ=
Идентификатор #563
Совпадение 169  PROTOCOL_SSLv3 : 169
Уязвимый файл
./tornado/test/httpserver_test.py
OWASP - A04 CWE-311
#sI4tMmV7HWBSsDqrfYulCI+/isE=
Идентификатор #566
Совпадение 175  ssl.PROTOCOL_TLSv1 : 175
Уязвимый файл
./tornado/test/httpserver_test.py
OWASP - A04 CWE-311
#24QX5+TmjiHVRlnwaqJMRPwUsA0=
Идентификатор #569
Совпадение 175  PROTOCOL_TLSv1 : 175
Уязвимый файл
./tornado/test/httpserver_test.py
OWASP - A04 CWE-311
Потенциальная
Потенциальная десериализация произвольных данных
Описание уязвимости
#IB/z9lx/azwswkyuiO1WfTbbi/Y=
Идентификатор #583
Совпадение 369  pickle.dumps(headers) : 369
Уязвимый файл
./tornado/test/httputil_test.py
OWASP - A08 CWE-502
#YoulXQ/48acLmrlVVBLRhSc4noE=
Идентификатор #585
Совпадение 370  pickle.loads(pickled) : 370
Уязвимый файл
./tornado/test/httputil_test.py
OWASP - A08 CWE-502
Потенциальная
Пустой блок обработки исключений
Описание уязвимости
#j2jmfHlNJgQMLWCo7fCLrMSsz9s=
Идентификатор #329
Совпадение 127  try: # StopIteration has a value attribute beginning in py33. # So does our Return class. return e.value except AttributeError: pass : 127
Уязвимый файл
./tornado/gen.py
OWASP - A05 CWE-390
#dFEUR2PX4BAMrmGWwQdu2FNw6q0=
Идентификатор #332
Совпадение 592  try: future.result() except asyncio.CancelledError: pass except Exception as e: if not isinstance(e, quiet_exceptions): app_log.error( "Exception in Future %r after timeout", future, exc_info=True ) : 592
Уязвимый файл
./tornado/gen.py
OWASP - A05 CWE-390
#BeOsJMyd6A1zbGJgWsIwgqOWPw8=
Идентификатор #334
Совпадение 793  try: await self._serving_future except Exception: pass : 793
Уязвимый файл
./tornado/http1connection.py
OWASP - A05 CWE-390
#m/H8d0hLkrZiPml6pwOpkSSqdiI=
Идентификатор #346
Совпадение 414  try: parsed = parse_cookie(self.headers["Cookie"]) except Exception: pass else: for k, v in parsed.items(): try: self._cookies[k] = v except Exception: # SimpleCookie imposes some restrictions on keys; # parse_cookie does not. Discard any cookies # with disallowed keys. pass : 414
Уязвимый файл
./tornado/httputil.py
OWASP - A05 CWE-390
#krWrXyNy9Ahc4GkTQgUgZg+11Xs=
Идентификатор #349
Совпадение 420  try: self._cookies[k] = v except Exception: # SimpleCookie imposes some restrictions on keys; # parse_cookie does not. Discard any cookies # with disallowed keys. pass : 420
Уязвимый файл
./tornado/httputil.py
OWASP - A05 CWE-390
#Tq7GHSFHymE0aZDKoH/GJxLeBhg=
Идентификатор #353
Совпадение 740  try: ret = callback() if ret is not None: from tornado import gen # Functions that return Futures typically swallow all # exceptions and store them in the Future. If a Future # makes it out to the IOLoop, ensure its exception (if any) # gets logged too. ... a non-None and non-yieldable # result, which should just be ignored. pass else: self.add_future(ret, self._discard_future_result) except asyncio.CancelledError: pass except Exception: app_log.error("Exception in callback %r", callback, exc_info=True) : 740
Уязвимый файл
./tornado/ioloop.py
OWASP - A05 CWE-390
#MLyTjpUjHAXcS0SiZbqd7bPL7wo=
Идентификатор #356
Совпадение 749  try: ret = gen.convert_yielded(ret) except gen.BadYieldError: # It's not unusual for add_callback to be used with # methods returning a non-None and non-yieldable # result, which should just be ignored. pass else: self.add_future(ret, self._discard_future_result) : 749
Уязвимый файл
./tornado/ioloop.py
OWASP - A05 CWE-390
#JeF8sEifLQK/91X9rZOgDrwyc1I=
Идентификатор #359
Совпадение 801  try: if isinstance(fd, int): os.close(fd) else: fd.close() except OSError: pass : 801
Уязвимый файл
./tornado/ioloop.py
OWASP - A05 CWE-390
#a7MKANxk9QJugLPDBwGkHD3YDeA=
Идентификатор #370
Совпадение 56  try: if hasattr(sys.stderr, "isatty") and sys.stderr.isatty(): if curses: curses.setupterm() if curses.tigetnum("colors") > 0: return True elif colorama: if sys.stderr is getattr( colorama.initialise, "wrapped_stderr", object() ): return True except Exception: # Very broad exception handling because it's always better to # fall back to non-colored logs than to break at startup. pass : 56
Уязвимый файл
./tornado/log.py
OWASP - A05 CWE-390
#rIBvYFZcwR4ADo71htOQ4K1cXrg=
Идентификатор #374
Совпадение 214  try: st = os.stat(file) except FileNotFoundError: pass else: if stat.S_ISSOCK(st.st_mode): os.remove(file) else: raise ValueError("File %s exists and is not a socket", file) : 214
Уязвимый файл
./tornado/netutil.py
OWASP - A05 CWE-390
#oYIB6PyPP0CsswFfudaqJzMDCg0=
Идентификатор #376
Совпадение 619  try: return datetime.datetime.strptime(value, format) except ValueError: pass : 619
Уязвимый файл
./tornado/options.py
OWASP - A05 CWE-390
#qqofeRYSyVWrz+UcjTAjgk7LIKQ=
Идентификатор #377
Совпадение 625  try: future.exception() except asyncio.CancelledError: pass : 625
Уязвимый файл
./tornado/iostream.py
OWASP - A05 CWE-390
#LduTrqfwIbYn+WFhKyIFbGuG9s0=
Идентификатор #380
Совпадение 1183  try: self.socket.connect(address) except BlockingIOError: # In non-blocking mode we expect connect() to raise an # exception with EINPROGRESS or EWOULDBLOCK. pass except socket.error as e: # On freebsd, other errors such as ECONNREFUSED may be # returned ... when attempting to connect to # localhost, so handle them the same way as an error # reported later in _handle_connect. if future is None: gen_log.warning("Connect error on fd %s: %s", self.socket.fileno(), e) self.close(exc_info=e) return future : 1183
Уязвимый файл
./tornado/iostream.py
OWASP - A05 CWE-390
#E8PbWq1Y3gR6OiOs8XEWDayJnyM=
Идентификатор #382
Совпадение 1349  try: self.socket.getpeername() except socket.error: pass else: # Indirectly start the handshake, which will run on the next # IOLoop iteration and then the real IO state will be set in # _handle_events. self._add_io_state(self.io_loop.WRITE) : 1349
Уязвимый файл
./tornado/iostream.py
OWASP - A05 CWE-390
#3GEQMLpaCBBQoOTBIIrylx3xLUI=
Идентификатор #388
Совпадение 53  try: return multiprocessing.cpu_count() except NotImplementedError: pass : 53
Уязвимый файл
./tornado/process.py
OWASP - A05 CWE-390
#JoIsJ3dv6q9pLaN72IYiEyzMXzY=
Идентификатор #390
Совпадение 648  try: del self.request.headers[h] except KeyError: pass : 648
Уязвимый файл
./tornado/simple_httpclient.py
OWASP - A05 CWE-390
#UkK6BtjG6MTZ70eTdwwpYgype24=
Идентификатор #391
Совпадение 57  try: return os.sysconf("SC_NPROCESSORS_CONF") except (AttributeError, ValueError): pass : 57
Уязвимый файл
./tornado/process.py
OWASP - A05 CWE-390
#itJqM2VuMZYeeyWrYuTvUOBcdnQ=
Идентификатор #421
Совпадение 77  try: return float(env) except ValueError: pass : 77
Уязвимый файл
./tornado/testing.py
OWASP - A05 CWE-390
#OxBwLx7T7/c1K2ZI29A11uMznMY=
Идентификатор #422
Совпадение 211  try: f.result() except asyncio.CancelledError: pass : 211
Уязвимый файл
./tornado/testing.py
OWASP - A05 CWE-390
#RNeTh+H8KqEYk8r52NfEUS5zSg8=
Идентификатор #427
Совпадение 2161  try: if issubclass(cls, UIModule): self.ui_modules[name] = cls except TypeError: pass : 2161
Уязвимый файл
./tornado/web.py
OWASP - A05 CWE-390
#qO6LZ6AINR6P7STh1QPiFIEV+aQ=
Идентификатор #511
Совпадение 175  try: call_soon(self._run_callback, functools.partial(callback, *args, **kwargs)) except RuntimeError: # "Event loop is closed". Swallow the exception for # consistency with PollIOLoop (and logical consistency # with the fact that we can't guarantee that an # add_callback that completes without error will # eventually execute). pass : 175
Уязвимый файл
./tornado/platform/asyncio.py
OWASP - A05 CWE-390
#oRF/2NDFZz1x26MJ2uQxhjoknjE=
Идентификатор #513
Совпадение 188  try: self.asyncio_loop.call_soon_threadsafe( self._run_callback, functools.partial(callback, *args, **kwargs) ) except RuntimeError: pass : 188
Уязвимый файл
./tornado/platform/asyncio.py
OWASP - A05 CWE-390
#prcBQbq/U5So7TNGNh15zDBLuw4=
Идентификатор #577
Совпадение 598  try: yield inner() except ValueError: pass : 598
Уязвимый файл
./tornado/test/gen_test.py
OWASP - A05 CWE-390
#Uu16Ytdfm0M3h9WPYGLBbt0kh0U=
Идентификатор #601
Совпадение 63  try: yield self.write_message(message, isinstance(message, bytes)) except asyncio.CancelledError: pass except WebSocketClosedError: pass : 63
Уязвимый файл
./tornado/test/websocket_test.py
OWASP - A05 CWE-390
#y0vf1/CIrIBMxLGunsnntPecjlY=
Идентификатор #602
Совпадение 88  try: # In a websocket context, many RequestHandler methods # raise RuntimeErrors. method() raise Exception("did not get expected exception") except RuntimeError: pass : 88
Уязвимый файл
./tornado/test/websocket_test.py
OWASP - A05 CWE-390
#zPN3jV/mL5t6l+LA3wU4Wbwa/Go=
Идентификатор #603
Совпадение 93  try: yield c.connect(server_addr) except EnvironmentError: pass else: connected_clients.append(c) : 93
Уязвимый файл
./tornado/test/tcpserver_test.py
OWASP - A05 CWE-390
#lbPwpObgxOvMWR248jmlRVgvg+w=
Идентификатор #609
Совпадение 167  try: Template(utf8("{% break %}")) raise Exception("Did not get expected exception") except ParseError: pass : 167
Уязвимый файл
./tornado/test/template_test.py
OWASP - A05 CWE-390
#J+L5rPYegTbq+emIsgTRZSPn7Zc=
Идентификатор #612
Совпадение 176  try: Template( utf8("{% for i in [] %}{% apply foo %}{% break %}{% end %}{% end %}") ) raise Exception("Did not get expected exception") except ParseError: pass : 176
Уязвимый файл
./tornado/test/template_test.py
OWASP - A05 CWE-390
#raz4C2q65B3zVTY3AlxxI7GQBRs=
Идентификатор #613
Совпадение 3097  try: result = url_spec.reverse() self.fail( "did not get expected exception when reversing %s. " "result: %s" % (path, result) ) except ValueError: pass : 3097
Уязвимый файл
./tornado/test/web_test.py
OWASP - A05 CWE-390
#+HtQaon5rT+XNlryXniZ1E6dh7c=
Идентификатор #621
Совпадение 74  try: await event.wait() except asyncio.CancelledError: pass : 74
Уязвимый файл
./tornado/test/testing_test.py
OWASP - A05 CWE-390
Потенциальная
Раскрытие информации в статических файлах или константах
Описание уязвимости
#0+AFCavJkxqLQbrCP3CAs7qUQlA=
Идентификатор #611
Совпадение 10  Password: : 10
Уязвимый файл
./demos/blog/templates/login.html
OWASP - A01 CWE-200
#3thc4mmtYsg6lNxXkP/lLoIsWOk=
Идентификатор #629
Совпадение 7  Password: : 7
Уязвимый файл
./demos/blog/templates/create_author.html
OWASP - A01 CWE-200
Потенциальная
Статический генератор случайных чисел
Описание уязвимости
#5zfrcP6817hGJjYpP6vqdQqp438=
Идентификатор #371
Совпадение 920  random.random() : 920
Уязвимый файл
./tornado/ioloop.py
OWASP - A02 CWE-330
#FBUlpUYbTTq9KvpXJTHf8VYq+N0=
Идентификатор #498
Совпадение 73  random.randrange(options.min_port, options.max_port) : 73
Уязвимый файл
./maint/benchmark/benchmark.py
OWASP - A02 CWE-330
#kQnhBC2hYV9AZUxwiDKsi+UI6CM=
Идентификатор #575
Совпадение 610  random.Random(42) : 610
Уязвимый файл
./tornado/test/iostream_test.py
OWASP - A02 CWE-330
#OS2ivlFgVP7vmsHrGamdxyvzuFY=
Идентификатор #578
Совпадение 1094  random.Random(42) : 1094
Уязвимый файл
./tornado/test/iostream_test.py
OWASP - A02 CWE-330
#ILHxBGCg2sfkw7MOJef8DFEuQu8=
Идентификатор #590
Совпадение 327  random() : 327
Уязвимый файл
./tornado/test/queues_test.py
OWASP - A02 CWE-330
Потенциальная
Уязвимые функции хэширования
Описание уязвимости
#UMHlgo2kZaSSXyZqEf1MqZ40SGw=
Идентификатор #429
Совпадение 1600  hashlib.sha1() : 1600
Уязвимый файл
./tornado/web.py
OWASP - A02 CWE-328
#nEQpID+eN11RGVBw63kRImB55Ow=
Идентификатор #431
Совпадение 2840  hashlib.md5() : 2840
Уязвимый файл
./tornado/web.py
OWASP - A02 CWE-328
#XnmzO3b2wkCDzfotBtnBSjZVfPE=
Идентификатор #473
Совпадение 124  hashlib.md5(object_name) : 124
Уязвимый файл
./demos/s3server/s3server.py
OWASP - A02 CWE-328
#k84iAu6KC1xdJkkezj/RznF4QRg=
Идентификатор #499
Совпадение 905  hashlib.sha1() : 905
Уязвимый файл
./tornado/websocket.py
OWASP - A02 CWE-328
#D9t4D4KRdlpq96RjNTmqkymm8xE=
Идентификатор #534
Совпадение 55  md5( utf8("%s:%s:%s" % (self.username, realm, self.password)) ) : 55
Уязвимый файл
./tornado/test/curl_httpclient_test.py
OWASP - A02 CWE-328
#aJduw2S8MAx0LP/nhEKSYNZ78jE=
Идентификатор #537
Совпадение 58  md5( utf8("%s:%s" % (self.request.method, self.request.path)) ) : 58
Уязвимый файл
./tornado/test/curl_httpclient_test.py
OWASP - A02 CWE-328
#/OgaoEkFtdkkznvihF2H4g3e3mE=
Идентификатор #540
Совпадение 61  md5(utf8("%s:%s:%s" % (h1, nonce, h2))) : 61
Уязвимый файл
./tornado/test/curl_httpclient_test.py
OWASP - A02 CWE-328
#hYzIPdAUBFxyu6F93AiFtwdNmdE=
Идентификатор #555
Совпадение 614  hashlib.sha1() : 614
Уязвимый файл
./tornado/test/iostream_test.py
OWASP - A02 CWE-328
#lg+0gCS/kVP+T69G8sVMSjgHIso=
Идентификатор #558
Совпадение 615  hashlib.sha1() : 615
Уязвимый файл
./tornado/test/iostream_test.py
OWASP - A02 CWE-328

Глоссарий

#jqueryhtmlinsidedom

JQuery добавление HTML кода в DOM

Уязвимость селектора, добавляющая HTML код в DOM структуру страницы.

#jqueryunsafefunctionsfordom

JQuery небезопасная функция для DOM

Небезопасная функция, добавляющая HTML код в DOM структуру.

#sqlinjection

Внедрение SQL-кода

Веб-приложение может формировать SQL-запросы, опираясь на данные, получаемые от пользователя. Из-за недостаточной обработки данных, злоумышленник может внедрить операторы SQL, тем самым изменить логику запроса, обрабатываемого базой данных. В ряде случаев злоумышленник не ограничен одним лишь чтением информации из базы данных. Также существует возможность читать произвольные файлы, создавать новые, проводить атаки, направленные на отказ в обслуживании. Развивая атаку, можно завладеть исходными кодами веб-приложения, загрузить и впоследствии выполнить вредоносный код.

Пример уязвимого сценария:

if (isset($_GET['id'])) {
                try {
                    $dbh = new PDO('mysql:dbname=test;host=127.0.0.1', 'root', 'pass');
                } catch (PDOException $e) {
                    echo "Connection failed\n";
                    exit;
                }
                $stm = $dbh->query("SELECT * FROM users WHERE id=" . $_GET['id']);
                $user = $stm->fetch();
                echo "User name: " . $user['name'] . "\n";
            }
            

Злоумышленник может получить произвольные данные, например версию базы данных, передав в параметре id следующую строку: 0+union+select+1,version().

Рисунок 1. Пример атаки «Внедрение SQL-кода»

Рекомендации

Для защиты от атак «Внедрение операторов SQL», рекомендуется приводить значение переменной к целочисленному типу.

if (isset($_GET['id'])) {
                try {
                    $dbh = new PDO('mysql:dbname=test;host=127.0.0.1', 'root', 'pass');
                } catch (PDOException $e) {
                    echo "Connection failed\n";
                    exit;
                }
                $stm = $dbh->query("SELECT * FROM users WHERE id=" . (int)$_GET['id']);
                $user = $stm->fetch();
                echo "User name: " . $user['name'] . "\n";
            }
            

Хорошим решением будет использование в коде приложения параметризированных SQL-запросов вместо простой конкатенации переменных с шаблоном запроса.

if (isset($_GET['id'])) {
                try {
                    $dbh = new PDO('mysql:dbname=test;host=127.0.0.1', 'root', 'pass');
                } catch (PDOException $e) {
                    echo "Connection failed\n";
                    exit;
                }
                $stm = $dbh->prepare("SELECT name FROM users WHERE id=?");
                $stm->execute(array($_GET['id']));
                $user = $stm->fetch(PDO::FETCH_ASSOC);
                echo "User name: " . $user['name'] . "\n";
            }
            

Кроме того, необходимо использовать принцип наименьших привилегий и гарантировать, что учетная запись пользователя, созданная для взаимодействия веб-приложения с базой данных, имеет минимальный набор прав, а все дополнительные привилегии недоступны.

Ссылки

#pythonassertion

Использование assert выражения

Обнаружено использование assert выражения. Подобный код будет удален при оптимизации байт кода. Убедитесь, что исключение не влияет на важные операции в коде
#urllibusagepython

Использование urllib

urllib позволяет производить операции не только с внешними ссылками, но и с локальными файлами. Это может привести к нежелательным запускам исполняемых файлов на локальной машине, особенно если вызов производится в соответствии с пользовательским вводом
#96

Использование жестко закодированного пароля

В программном обеспечении реализован жестко закодированный пароль, который используется для аутентификации или взаимодействия с внешними компонентами. Жестко закодированный пароль может стать причиной серьезных ошибок аутентификации, которые сложно обнаружить системному администратору. После обнаружения недостатков бывает сложно их исправить, поэтому администратор может полностью заблокировать доступ к продукту. Основные сферы применения: для "внутренних" целей, когда механизм аутентификации в ПО проверяет жестко закодированный пароль; для "внешних" целей, когда для подключения ПО к другим системам или компонентам используется жестко закодированный пароль. При использовании для внутренних целей в продукте создается стандартная учетная запись администратора, для которой жестко прописывается простой пароль. Этот жестко закодированный пароль является одинаковым для всех установок продукта и, как правило, не может быть изменен или заблокирован системным администратором без доработки программы вручную или установки исправлений для ПО. Если пароль стал известен или опубликован (например, в сети Интернет), то любой пользователь, знающий этот пароль, может получить доступ к продукту. Также возможно проведение массовых атак, например с использованием "червей", поскольку все установки ПО, независимо от организации, будут иметь одинаковый пароль. При использовании для внешних целей предполагается аутентификация между фронтенд-системами и бэкенд-службой. Для доступа к бэкенд-службе может использоваться фиксированный пароль, который можно легко вычислить. Учетные данные бэкенда могут быть жестко прописаны разработчиком в ПО фронтенда. Любой пользователь программы может извлечь этот пароль. Системы на стороне пользователя, имеющие жестко закодированные пароли, представляют собой более серьезную угрозу, поскольку извлечение пароля из бинарного файла, как правило, не представляет особой сложности.
#obsoletefunction

Использование устаревшей функции

В коде используются нерекомендуемые или устаревшие функции, что может быть связано с отсутствием анализа или поддержки кода. По мере развития языков программирования функции могут устаревать по следующим причинам: * улучшения, реализуемые в языке; * улучшение эффективности и безопасности выполняемых операций; * изменения в правилах, описывающих работу некоторых функций. Удаляемые функции обычно заменяются аналогами, которые выполняют те же задачи иным и, как правило, более эффективным способом.
#cross-sitescripting

Межсайтовое выполнение сценариев

Веб-приложение уязвимо, когда оно, получив данные из недоверенного источника, выводит их без необходимой обработки в ответ веб-сервера. Злоумышленник может провести данную атаку с целью выполнения вредоносного сценария в контексте домена, на который был отправлен запрос. Как правило, вредоносный код осуществляет отправку злоумышленнику важной информации пользователя, например, идентификатора сессии.

Пример уязвимого сценария:

if (isset($_GET['name'])) {
                echo "Hello {$_GET['name']}!\n";
            }
            

Злоумышленник может вынудить пользователя перейти по адресу /xss/reflected/?name=%3Cscript%3Ealert("xss")%3C/script%3E . В ответ веб-сервера будет внедрен следующий код: "<script>alert("xss")</script>". Результат проведения атаки приведен на рисунке:

Рисунок 1. Пример проведения атаки.

Веб-приложение может иметь уязвимости, позволяющие проводить атаки «Межсайтовое выполнение сценариев» не только в местах вывода данных, полученных из HTTP-запроса, но и в местах вывода результатов запросов к базе данных, содержимого файлов и т.д.

Рекомендации

Для устранения уязвимости необходимо экранировать служебные символы в зависимости от контекста, в который вставляются данные.

Ссылки

#insecuresslprotocol

Небезопасные настройки SSL

Использование данных опций может ослабить защиту передаваемых данных приложения.
#dynamiccodeinjection

Некорректная нейтрализация директив в динамически вычисляемом коде (Внедрение eval)

Программное обеспечение получает входные данные от вышестоящего компонента, но не осуществляет или осуществляет некорректно нейтрализацию синтаксиса перед использованием данных для динамической оценки (например, для вызова функции eval). Это позволяет злоумышленникам выполнить произвольный код или, по крайней мере, повлиять на то, какой код будет выполнен.

#openredirect

Открытое перенаправление

Веб-приложение может осуществлять перенаправление пользователей. В ряде случаев адрес, на который будет перенаправлен пользователь, формируется из данных, переданных пользователем.

Пример уязвимого сценария:

    if (isset($_GET['redirect'])) {
                    header('Location: ' . $_GET['redirect']);
                }
            

В случае перехода пользователем по ссылке, полученной от злоумышленника, произойдет перенаправление по специально сформированному адресу. Пример ссылки: http://trusted.com/?redirect=http://evil.com. Чтобы скрыть адрес перенаправления, параметр можно закодировать. Тогда ссылка примет следующий вид: http://trusted.com/?redirect=%68%74%74%70%3A%2F%2F%65%76%69%6C%2E%63%6F%6D.

Данная уязвимость может использоваться для фишинг-атак, обхода механизмов защиты при проведении атак «Подделка HTTP-запроса» и т.д.

Рекомендации

Рекомендуется осуществлять проверку по белому списку доменных имен и протоколов. Также рекомендуется использовать страницу с предупреждением о переходе на другой сайт. Пользователь должен быть перенаправлен с длительной задержкой, либо по нажатию на ссылку.

Ссылки

#logforging

Подделка записи файла журнала

Приложение осуществляет недостаточную проверку данных, поступающих от пользователя, что позволяет злоумышленнику сформировать поддельную запись в лог-файл или внедрить в него вредоносный код.

Веб-приложение может формировать записи для лог-файла, опираясь на данные, получаемые от пользователя. Из-за недостаточной обработки данных, злоумышленник может внедрить символы, используемые для разделения записей, тем самым сформировать поддельную запись в лог-файле или повредить журнал, сделав невозможным автоматическую обработку данного файла. Также злоумышленник может внедрить вредоносный код, который может быть использован при развитии атаки.

Ниже приведен пример, уязвимого сценария:

    $result = $authService->authenticate($login, $password);
            
                if (!$result->isValid()) {
                    $log->write("Authentication failed for user '$login'");
                }
            

Рекомендации

Рекомендуется обрабатывать данные, записываемые в лог-файл, убирая или экранируя символы, используемые для разметки.

Ссылки

#server-siderequestforgery

Подделка запроса со стороны сервера

Приложение, получив URL-адрес или HTTP-сообщение, осуществляет недостаточную проверку адреса назначения, перед отправкой запроса. Используя данный недостаток, злоумышленник может отправлять запросы на серверы с ограниченным доступом (например, компьютеры в локальной сети). Данные действия могут привести к разглашению важных данных, получению злоумышленником исходных кодов приложения, к отказу в обслуживании и т.д.

Ссылки

#emptydefaultexceptionhandler

Пустой блок обработки исключений

Слабая обработка ошибок: пустой блок обработки исключений. Игнорирование исключения может заставить программу не учитывать неожиданные состояния и условия.
#200

Раскрытие информации в статических файлах или константах

HTML документы или строковые константы могут содержать чувствительную информацию. Стоит ограничить присутствие такой информации в этих местах
#pathtraversal

Раскрытие путей

Приложение использует данные извне для формирования пути к используемому файлу внутри определенной директории, но не проверяет их на потенциально небезопасные подстроки, такие как ".." или абсолютные пути в другие директории "/abs/path". Это может привести к несанкционированному доступу к другим файлам.

#122

Статический генератор случайных чисел

Статические генераторы случайных чисел, в отличие от криптографических, не обеспечивают требуемой случайности выходных последовательностей, поэтому атакующие могут осуществить атаку подбора.
#remotecodeexecution

Удаленное выполнение кода

Веб-приложение может формировать исполняемый код, используя данные, полученные от пользователя. В случае отсутствия обработки специальных символов, способных изменить синтаксис или поведение предназначенного кода, злоумышленник может выполнить произвольный код.

Пример уязвимого сценария:

    if (isset($_GET['documents'])) {
                    $documents = eval('return array(' . $_GET['documents'] . ');');
                    foreach ($documents as $document) {
                        // Processing document ...
                    }
                }
            

В данном примере злоумышленник может передать сценарию вредоносный код, который будет выполнен приложением. На изображении продемонстрирован пример атаки – вызывается стандартная функция phpinfo:

Рисунок 1. Проведение атаки «Выполнение произвольного кода»

Рекомендации

Для устранения уязвимости рекомендуется произвести рефакторинг веб-приложения, так чтобы в ней не содержалось участков динамически генерирующих исполняемый код. Также рекомендуется выполнять код в изолированной среде.

Ссылки

#pythonweakcryptographichash

Уязвимые функции хэширования

Использование уязвимых функций хэширования подвергает приложение атакам, основанным на предсказании коллизий хэшей или их восстановлении. Криптографическое хэширование гарантирует, что возникновение коллизий хэшей маловероятно, и делает задачу восстановления исходного значения по хэшу трудновыполнимой.
Фильтры уязвимостей Сбросить все
Опасность
Статус подтверждения
Тип
Выбрано: Все типы
Режим сканирования
Модули поиска уязвимостей
Обнаружена
Способ эксплуатации
Исключенные уязвимости
Дополнительно показывать